NsArray ContainsObject不使用Custom NsObject Class

Use*_*343 1 compare objective-c nsarray nsobject ios

我正在检查我的一个数组是否包含了Nsobject我创建的自定义方式.我正在使用ContainsObjectmethod.my问题是包含对象不能正常工作.即使我在数组中有相同的对象它没有返回真值.

if([self.arrSelectedInterest containsObject:interest_ent])
Run Code Online (Sandbox Code Playgroud)

我还附加了我的调试点的屏幕截图,显示了nsarray和比较对象的值,并且我发现它interest_ent是一个包含in的同一个对象,self.arrSelectedInterest 但它总是返回false.

在此输入图像描述

任何人都知道如何检查我的自定义nsobject的nsarray是否包含特定的对象?

以下是我的哈希和isEqual方法,我已经覆盖并在nsobejct中抛出我的属性类型.@interface InterestEntity:JSONModel

@property (strong, nonatomic) NSString* InterestId;
@property (strong, nonatomic) NSString* Name;
@property (strong, nonatomic) NSString<Optional>* Code;
@property (strong, nonatomic) NSString<Optional>* Description;
@property (strong, nonatomic) NSArray<Optional>* Hashtags;


- (NSUInteger)hash {
    NSUInteger result = 1;
    NSUInteger prime = 31;

    result = prime * result + [self.InterestId hash];
    result = prime * result + [self.Name hash];
    result = prime * result + [self.Code hash];
    result = prime * result + [self.Description hash];
    result = prime * result + [self.Hashtags hash];
    return result;
}
- (BOOL)isEqual:(id)object {
    BOOL result = NO;

    if ([object isKindOfClass:[self class]]) {
        result = [[self InterestId] isEqualToString:[object InterestId]] &&
        [[self Name] isEqualToString:[object Name]] &&
        [[self Code] isEqualToString:[object Code]] &&[[self Description] isEqualToString:[object Description]] && [[self Hashtags] isEqual:[object Hashtags]];
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

Mah*_*dam 7

问题在于实现isEqual处理可空对象的方法

即如果两个字符串为null isEqualToString:将返回false

这是处理所有情况的正确实现

- (BOOL)isEqual:(id)object {
    if (object == self)
        return YES;
    if (!object || ![object isKindOfClass:[self class]])
        return NO;

    // not nullable fields
    if (![self.interestId isEqualToString:object.interestId])    
        return NO;   
    if (![self.name isEqualToString:object.name])    
        return NO;
    if (![self.code isEqualToString:object.code])    
        return NO;

    // nullable fields (2 if statements for more clean code)
    if (self.description != null && ![self.description isEqualToString:object.description])    
        return NO;    
    if (object.description != null && ![object.description isEqualToString:self.description])    
        return NO;

    if (self.hashtags != null && ![self.hashtags isEqualToString:object.hashtags])    
        return NO;    
    if (object.hashtags != null && ![object.hashtags isEqualToString:self.hashtags])    
        return NO;  


    return YES;
}
Run Code Online (Sandbox Code Playgroud)