我正在尝试比较Objective-C中的对象,想知道如何比较两个包含两个NSString的对象(这些对象是UIView的实例):
#import <Foundation/Foundation.h>
@interface Notebook : UIView
{
NSString *nameOfBook;
NSString *colourOfBook;
}
@property (nonatomic, retain) NSString *nameOfBook;
@property (nonatomic, retain) NSString *colourOfBook;
假设我有两个NSMutableArrays,它们都保存了多个Notebook对象。其中一个名为reality,另一个名为theory。Reality包含两个名为nameOfBook的笔记本,分别是@"Lectures"和@"Recipies",但它们的colorOfBook属性都为空。Theory包含三个名为nameOfBook的笔记本,分别是@"Lectures"、@"Recipies"和@"Zoo",而colorOfBook属性则是@"red"、@"yellow"和@"green"。
我想比较这两个数组并根据reality调整theory。在这种情况下,这意味着删除@"Zoo"。我不能简单地用reality替换theory,因为这样会丢失theory中存储的所有颜色。
以下是我想出的代码:
for (int i=0; i < [theory count]; i++) {
Notebook *testedNotebook = [Notebook alloc];
testedNotebook = [theory objectAtIndex:i];
if ([reality indexOfObject:testedNotebook] == NSNotFound)
{
NSLog(@"Book is not found in reality - remove it from theory...");
[theory removeObject:testedNotebook];
}
[testedNotebook release];
}
现在,我的一个大问题是如何比较这些对象。理想情况下,我希望仅比较它们的名称而不考虑颜色。但我猜现在我的代码并不是这样工作的。整个对象被比较,实际上包含 @"Lectures" 和 @""(无颜色)的对象与理论上包含@"Lectures"和@"red"的对象不能相同。
我该如何实现根据对象属性之一(在本例中是名称)进行比较呢?
-isEqual:
方法,特别是针对UIView
这样的子类。UI框架可能依赖于不同实例的UIView比较不相等。此外,如果您覆盖了-isEqual:
方法,则必须确保-hash
方法是一致的。请参阅http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/doc/uid/20000052-BBCCECDG中的文档。 - JeremyP