我有一个 NSMutableOrdered 集,其中包含两种类型的对象(我创建的),即 Pieces 和 Others。
Piece 和 Other 都有它们的 isEqual 方法,如下所示:
片:
- (BOOL)isEqual:(Piece *)object
{
if (([title isEqualToString:[object title]])
&& ([composer isEqualToString:[object composer]])
&& (major == [object major])
&& (tempo == [object tempo])
&& (pieceKey == [object pieceKey])
&& (pieceTime == [object pieceTime]))
return YES;
else
return NO;
}
其他:
- (BOOL)isEqual:(Other *)object
{
if (([title isEqualToString:[object title]])
&& ([subTitle isEqualToString:[object subTitle]])
&& ([description isEqualToString:[object description]])
&& (otherTime == [object otherTime]))
return YES;
else
return NO;
}
我还覆盖了两个类的散列,为每个实例创建一个唯一的散列(通过获取 ivars 的 int 值并添加它们)。
在我的应用程序中,从集合中删除了另一个,然后当我尝试向集合中添加一块时,我得到了这个:
-[Other isEqual:]: message sent to deallocated instance 0x80d5680
这是哈希方法:
- (NSUInteger)hash
{
NSUInteger prime = 31;
NSUInteger result = 1;
result = prime * (result + [title intValue]);
result = prime * (result + [composer intValue]);
result = prime * (result + major);
result = prime * (result + tempo);
result = prime * (result + pieceKey);
result = prime * (result + pieceTime);
return result;
}
如果有人知道为什么会这样,我真的会提供一些帮助。
谢谢,