Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C中比较对象_Objective C_Cocoa - Fatal编程技术网

在Objective-C中比较对象

在Objective-C中比较对象,objective-c,cocoa,Objective C,Cocoa,我试图比较Objective-C中的对象,只是想知道如何比较包含两个NSString的两个对象(UIView的实例): #import <Foundation/Foundation.h> @interface Notebook : UIView { NSString *nameOfBook; NSString *colourOfBook; } @property (nonatomic, retain) NS

我试图比较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;
现在,我的大问题是如何比较这些对象。理想情况下,我只想比较他们的名字,而不考虑颜色。但我想现在我的代码不是这样工作的。将整个物体进行比较,现实中持有"讲座"和"(无颜色)的物体不可能与理论上持有"讲座"和"红色"的物体相同


如何实现仅根据对象的一个属性(在本例中为名称)比较对象?

如果阅读IndexOfoObject:的文档,您会发现NSArray为数组中的每个对象调用isEqual:。所以,重写笔记本的isEqual并实现您自己的比较例程


顺便问一下,为什么您在分配时没有初始化笔记本的一个实例,用一个自动释放的实例覆盖它,然后再释放它?(别介意你可能会先在循环中释放它!)你注定会崩溃。为什么在遍历数组时要从数组中删除对象?

您希望实现类似
-isEqual:
的方法。请看一看。

我想你是对的,我应该再仔细考虑一下。谢谢你的想法!我希望我没有被那些“无中生有”的评论所束缚对于像
UIView
这样的子类,我会非常小心地重写
-isEqual:
。UI框架可能取决于UIView的不同实例。此外,如果覆盖
-isEqual:
,则必须确保
-hash
是一致的。请参阅
    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];

}