2014-01-13 36 views
-1

我想比較兩個具有我的模型對象的可變數組。在一個數組中,我正在創建模型對象,在另一個數組中,我使用copyWithZone(我的模型是NSObject的子類)創建了原始對象的副本。然而,當我比較時,即使我沒有改變任何東西,它總是失敗。複製項目數組比較失敗

我打印兩個數組只是爲了檢查,兩者似乎都有相同的對象。

isEqualToArray不能複製項目?

有人可以指出我要去哪裏嗎?或者如果有其他方法可以做這個比較?

+0

你在數組裏面有自定義對象嗎? – Greg

+0

你實現了'isEqual:'和'hash'嗎?默認實現不適用於自定義對象。 –

+0

顯示'copyWithZone:','isEqual:'和'isEqualTo:'的實現。 – trojanfoe

回答

0

當涉及對象之間的比較時,則isEqualhash方法應該被覆蓋。只有當對象通過isEqual測試時,isEqualToArray纔會返回true。所以請在您的模態對象中實施isEqualhash方法。之後,您將能夠使用isEqualToArray方法。

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; 
}