-1

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

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

isEqualToArray不适用于复制的项目?

有人可以指出我哪里出错了吗?或者是否有其他方法可以进行这种比较?

4

2 回答 2

0

当对象之间涉及比较时,应该重写isEqual和方法。仅当对象通过测试时, hashisEqualToArray 才会返回 true 。isEqual所以请在你的模态对象中实现isEqual和方法。hash之后,您将能够使用isEqualToArray方法。

于 2014-01-13T11:59:17.413 回答
0

我建议您以类似于以下示例的格式覆盖两个 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;
}
于 2014-01-13T14:07:45.160 回答