popełniłem błąd podczas tworzenia Tableview class
, i przypadkowo dotrzymałem @property
jak copy
kiedy określono go:Dlaczego właściwość NSMutableArray (copy, nonatomic) tworzy NSArrays?
@property (copy, nonatomic) NSMutableArray *words;
ja zainicjowane tablicę „poprawnie” (Uwaga: jest to trzecia próba, więc proszę ignorować fakt, że nie używam mutableCopy oraz inne lepsze sposoby robienia tego)
NSArray *fixedWords = @[@"Eeny", @"Meeny", @"Miny", @"Moe", @"Catch", @"A", @"Tiger", @"By", @"His", @"Toe"];
NSMutableArray *mutWords = [[NSMutableArray alloc] initWithArray:fixedWords];
self.words = mutWords;
jednak kiedy później przyszedł, aby zmienić kolejność tablicę, rozbił się na linii removeObjectAtIndex:
id object = [self.words objectAtIndex:fromIndexPath.row];
NSUInteger from = fromIndexPath.row;
NSUInteger to = toIndexPath.row;
[self.words removeObjectAtIndex:from];
Z komunikatu o błędzie
unrecognized selector sent to instance
było dużo kopania, aby dowiedzieć się, że to dlatego, że kopia oznacza, że przypisanie wyników NSMutableArray w tworzeniu standardu (nonmutable) NSArray. Czy ktoś może wyjaśnić, dlaczego to jest prawidłowe zachowanie?
'@property (kopia, nonatomic) NSMutableArray * słowa;' bez użycia kopii, ty shuld use keep. –
lub mocny zamiast zachować –
możliwy duplikat [Używanie -mutableCopyWithZone: na niestandardowej klasie czyni go niezmiennym] (http://stackoverflow.com/questions/14841130/using-mutablecopywithzone-on-custom-class-makes-it-immutable) –