复制项目的阵列比较失败

时间:2014-01-13 11:52:40

标签: ios iphone objective-c nsmutablearray nscopying

我正在尝试比较具有模型对象的两个可变数组。在一个数组中,我按原样创建模型对象,而在另一个数组中,我使用copyWithZone创建原始对象的副本(我的模型是NSObject的子类)。然而,当我比较时,即使我没有改变任何东西,它总是失败。

我打印两个数组只是为了检查,两者似乎都有相同的对象。

isEqualToArray无法处理复制的项目吗?

有人可以指出我哪里出错吗?或者,如果还有其他方法可以进行这种比较吗?

2 个答案:

答案 0 :(得分:0)

当对象之间涉及比较时,应覆盖isEqualhash方法。只有当对象通过isEqual测试时,isEqualToArray才会返回true。因此,请在模态对象中实现isEqualhash方法。之后,您将能够使用isEqualToArray方法。

答案 1 :(得分:0)

我建议您以类似于下面示例的格式覆盖两个NSObject子类上的isEqual:方法。

假设有Object类和Comparison Object的对象。两者都包含名为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;
}