我有一个类,说类人。在课堂上,我有几个 NSMutableArrays。
@property NSMutableArray *arrayOne;
@property NSMutableArray *arrayTwo;
...
现在我想复制那个类,这样我就可以从函数中返回它并使用副本并更改它的数据。我想在内存中拥有对象的新副本,而不是对同一地址的另一个引用。
为此,我在我的 Person.m 中实现了这一点:
-(id)copyWithZone:(NSZone *)zone
{
Person *copy = [[Person allocWithZone:zone] init;
copy.arrayOne = [NSMutableArray arrayWithArray:self.arrayOne];
copy.arrayTwo = [NSMutableArray arrayWithArray:self.arrayTwo];
...
return copy;
}
到目前为止,这就像我想要的那样工作,但是当我尝试对副本的数组进行排序时,出现错误:-[__NSArrayI sortUsingSelector:]: unrecognized selector sent to instance 0x100108a30
我注意到原始数组的类型是“_ NSArrayM”,但副本是“ _NSArrayI”...
那我做错了什么?我听说过使用 NSArchiver 和 NSArchiver 进行深度复制...我必须使用它吗?抱歉,我对 C 和 Objective-C 很陌生...:D
我希望你能帮我解决这个问题。=)
对不起我的“学校英语”......
干杯,尼克
编辑:数组由 NSString 对象组成,所以我可以使用
sortUsingSelector:@selector(caseInsensitiveCompare:)
对数组进行排序。