Я думал, что у меня есть хорошее понимание Объектов и изменчивости в Objective-C, но я заметил кое-что любопытное с NSArray
.
Если у меня есть следующее, которое не работает:
NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ];
"myObject" никогда не добавляется в "myArray" .
Однако работает следующее:
NSArray *someArray = [[NSUserDefaults standardUserDefaults] arrayForKey:someKey];
NSArray *myArray = [someArray arrayByAddingObject:myObject];
Какое это объяснение?Я знаю, что NSArray
не является изменяемым, но поскольку это происходит во время первоначального присваивания, оно должно работать, поскольку любой из этих способов выглядит эквивалентным.
[[NSUserDefaults standardUserDefaults] arrayForKey:someKey]
возвращает NSArray
NSArray
Итак, NSArray
получается просто из [NSArray arrayByAddingObject:Object]
Спасибо!
EDIT 1
Я просто хочусохранить NSArray
обратно в NSUserDefaults
:
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:someKey];
Он никогда не сохранял его должным образом, и поэтому при отладке я обнаружил, что myObject никогда не добавлялся при создании массива.
Примечание. Я тестировал только с [[NSUserDefaults standardUserDefaults] arrayForKey:someKey]
, возвращая пустой массив / nil
РЕДАКТИРОВАТЬ 2
Я выделил проблему aнемного; это происходит, только если [NSUserDefaults standardUserDefaults] arrayForKey:someKey]
возвращает "nil" (в основном, массив не существует в NSUserDefaults
).Мне все еще интересно узнать, почему это не проблема для второго решения кода, которое у меня есть.