2010-11-30 3 views
3

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

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

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

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

Это отлично работает в течение первых нескольких раз, но после того, как я сделать некоторые случайные вещи и вернуться, чтобы попытаться перезагрузить точку зрения, он выходит из строя. В нем говорится:

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

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

ответ

6

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

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

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

+0

Да, что, казалось бы, была проблема. Это больше не сбой. Вздох, похоже, что это небольшой контроль - это то, что давало мне головные боли. Спасибо за помощь Нава. :) – gabaum10 2010-11-30 20:08:50

+0

если это помогло, отметьте это как правильный ответ. благодаря! – 2010-11-30 20:12:11

0

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

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

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

Смежные вопросы