NSMutableSet中自定义对象的等同性

时间:2017-02-16 16:51:47

标签: ios objective-c equality nsmutableset

我在将自定义相等性检查添加到我自己的一个对象时遇到了一些困难。

我有一个自定义Message对象,该对象具有唯一的messageID属性NSString,以及有关该消息的其他信息。

对象存储在NSMutableSet中,因此集合中需要唯一性,但我需要它们基于messageID而不是默认值。

我已添加以下代码以便执行此操作。

- (BOOL)isEqual:(id)object
{
    if (![object isKindOfClass:Message.self]) {
        return false;
    }

    if (object == self) {
        return true;
    }

    Message *otherMessage = (Message *)object;

    if ([otherMessage.messageID isEqualToString:self.messageID]) {
        return true;
    }

    return false;
}

- (NSUInteger)hash
{
    return [self.messageID hash];
}

但是,当我开始将Message个对象的实例添加到集合中时,应用程序(有时并非总是)在以下某行中崩溃:

if ([otherMessage.messageID isEqualToString:self.messageID]) {

OR

return [self.messageID hash];

基本上每当它试图访问messageID属性时。

我得到的错误是EXC_BAD_ACCESS

非常感谢任何正确方向的指针!

0 个答案:

没有答案