我犯了一個錯誤,同時創造一個TableView中class
,並且意外地保持我的@property
爲copy
當我定義它:爲什麼(複製,非原子)NSMutableArray屬性創建NSArrays?
@property (copy, nonatomic) NSMutableArray *words;
我初始化數組「正確」(注:這是第三次嘗試,所以請忽略我不是使用mutableCopy及其他更好的這樣做的方法)
NSArray *fixedWords = @[@"Eeny", @"Meeny", @"Miny", @"Moe", @"Catch", @"A", @"Tiger", @"By", @"His", @"Toe"];
NSMutableArray *mutWords = [[NSMutableArray alloc] initWithArray:fixedWords];
self.words = mutWords;
然而,當我後來重新排序陣列的事實,它墜毀在removeObjectAtIndex行:
id object = [self.words objectAtIndex:fromIndexPath.row];
NSUInteger from = fromIndexPath.row;
NSUInteger to = toIndexPath.row;
[self.words removeObjectAtIndex:from];
隨着錯誤消息
unrecognized selector sent to instance
採取了很多挖弄清楚,這是因爲該拷貝意味着分配在創建一個標準(nonmutable)的NSArray的NSMutableArray中的結果。任何人都可以解釋爲什麼這是正確的行爲?
'@財產(副本,非原子)的NSMutableArray *字樣;'沒有用的副本,你shuld使用保留。 – 2013-02-13 15:18:04
或強,而不是保留 – 2013-02-13 15:20:25
可能重複[使用-mutableCopyWithZone:在自定義類使它不變(http://stackoverflow.com/questions/14841130/using-mutablecopywithzone-on-custom-class-makes-it-immutable ) – 2013-02-13 15:21:42