【发布时间】:2015-05-17 04:14:14
【问题描述】:
我正在检查我的数组之一是否包含我创建自定义方式的Nsobject。
我正在使用ContainsObject 方法。我的问题是包含的对象永远无法正常工作。即使我在数组中有相同的对象,它也没有返回真实值。
if([self.arrSelectedInterest containsObject:interest_ent])
我还附上了我的调试点的屏幕截图,它显示了 nsarray 的值和比较对象,我发现 interest_ent 是包含在 self.arrSelectedInterest 中的同一个对象
但它仍然总是返回 false。
有人知道如何检查我的自定义 nsobject 的 nsarray 是否包含特定的对象吗?
以下是我的 hash 和 isEqual 方法,我已经覆盖了它们,并且还在 nsobejct 中显示了我的属性类型。 @interface InterestEntity : JSON模型
@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;
}
【问题讨论】:
-
您是否在自定义类上正确实现了
isEqual:和hash方法? -
不,我的 nsobject 类中没有这些方法
-
那是你的问题。
containsObject:在对象上使用isEqual:。默认实现只是查看对象指针。 -
你能解释一下如何在我的 nsobject 中覆盖它吗?
-
@YogeshSuthar 这是因为
isEqual:的默认实现是比较内存。它与containsObject:无关。这都是关于isEqual:的实现。只要在自定义类中正确实现了isEqual:,您就会得到所需的行为。
标签: ios objective-c compare nsarray nsobject