Объект из NSUserDefaults освобождает? - PullRequest
3 голосов
/ 30 ноября 2010

Итак, у меня есть имя пользователя, сохраненное в UserDefaults.По какой-то причине я испытываю странное поведение.

У меня есть контроллер данных, который отправляет и извлекает некоторые данные с сервера на основе имени пользователя.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

userID = [prefs stringForKey:@"username"];

Первые несколько раз это работает нормально, но после того, как я сделаю некоторые случайные вещи и вернусь, чтобы попытаться перезагрузить представления, произойдет сбой.Он говорит:

-[CFString retain]: message sent to deallocated instance 0x4b18ff0

Это странно, потому что он останавливается на линии NSLog.Кто-нибудь видел это раньше или знает, почему это может происходить ??

Ответы [ 2 ]

6 голосов
/ 30 ноября 2010

Как вы определили свой userID?Если это свойство с атрибутом сохранения, вы должны вызвать

self.userID = [prefs stringForKey:@"username"];

, таким образом ваша строка будет сохранена автоматическиСтрока, возвращаемая из stringForKey, автоматически освобождается.

0 голосов
/ 30 ноября 2010

stringForKey возвращает объект автоматического выпуска, который вы не сохраняете, вероятно, он освобождается, как только этот метод завершает работу.

Вам необходимо сохранить эту строку, выполнив это вручную или используя объявление свойства с параметром сохранения.

И тогда вам нужно выпустить его в какой-то момент (по крайней мере, в dealloc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...