我想比较两个具有我的模型对象的可变数组。在一个数组中,我正在创建模型对象,在另一个数组中,我使用copyWithZone
(我的模型是NSObject
的子类)创建了原始对象的副本。然而,当我比较时,即使我没有改变任何东西,它总是失败。复制项目数组比较失败
我打印两个数组只是为了检查,两者似乎都有相同的对象。
将isEqualToArray
不能复制项目?
有人可以指出我要去哪里吗?或者如果有其他方法可以做这个比较?
我想比较两个具有我的模型对象的可变数组。在一个数组中,我正在创建模型对象,在另一个数组中,我使用copyWithZone
(我的模型是NSObject
的子类)创建了原始对象的副本。然而,当我比较时,即使我没有改变任何东西,它总是失败。复制项目数组比较失败
我打印两个数组只是为了检查,两者似乎都有相同的对象。
将isEqualToArray
不能复制项目?
有人可以指出我要去哪里吗?或者如果有其他方法可以做这个比较?
当涉及对象之间的比较时,则isEqual
和hash
方法应该被覆盖。只有当对象通过isEqual
测试时,isEqualToArray才会返回true。所以请在您的模态对象中实施isEqual
和hash
方法。之后,您将能够使用isEqualToArray
方法。
我建议你用类似于下面例子的格式覆盖两个NSObject子类的isEqual:方法。
假设存在对象类和比较对象类的对象。两者都包含名为propA(nsnumber)和propB(nsstring)的属性。即使两个对象具有相同的子类,这也可以工作。
-(BOOL)isEqual:(id)object {
if ([object isKindOfClass:[ComparedObject class]]) {
if ([self.propA isEqualToNumber:object.propA] && [self.propB
isEqualToString:object.propB]) {
return YES;
}
}
return NO;
}
然后,您可以简单地遍历数组的内容并检查下面显示的示例方法中的每个对象。
- (BOOL) isArrayEqual:(NSMutableArray *)fArray compareTo:(NSMutableArray *)sArray {
for (CustomObject *obj in fArray) {
NSUInteger index = [fArray indexOfObject:obj];
if (![obj isEqual:[sArray objectAtIndex:index]]) {
return NO;
}
}
return YES;
}
你在数组里面有自定义对象吗? – Greg
你实现了'isEqual:'和'hash'吗?默认实现不适用于自定义对象。 –
显示'copyWithZone:','isEqual:'和'isEqualTo:'的实现。 – trojanfoe