2012-04-22 7 views
0

Доброе утро, я сделал метод IBAction который сохраняет некоторые объекты в массив:Значение для ключа равно нулю. Зачем?

-(IBAction)saveToFav:(id)sender 
{ 
    NSUserDefaults *newDefaults = [NSUserDefaults standardUserDefaults]; 
    favorites = [[NSMutableArray alloc]initWithArray:[newDefaults mutableArrayValueForKey:@"favorites"] copyItems:YES]; 

    // check if array already contains an object 

    if (![favorites containsObject:self.title]) 
    { 
     [favorites addObject:self.title]; 
    } 
    [newDefaults setObject:favorites forKey:@"favorites"]; 
} 

Однако, когда я называю этот метод приложение вылетает с ошибкой:

[NSKeyValueSlowMutableArray getObjects:range:]: value for key favorites of object 0x8939030 is nil'

Почему это происходит? Спасибо!

Max

ответ

2

Похоже, ваши данные (избранное) не было написано в вашей defaults.You может forcesave настройки по умолчанию, выполнив это:

[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

Большое спасибо! Я попробую это прямо сейчас. – SmartTree

+0

Вы, наверное, уже поняли это, но ... это правильно в вашем случае: [newDefaults synchronize]; – TompaLompa

+0

Хорошо, но где я должен использовать его в своем коде? Здесь? 'NSUserDefaults * newDefaults = [NSUserDefaults standardUserDefaults]; [newDefaults synchronized]; избранное = [[NSMutableArray alloc] initWithArray: [newDefaults mutableArrayValueForKey: @ "избранное"] copyItems: YES]; ' – SmartTree

1

newDefaults равна нулю для ключевых "избранных".

+0

Как и у вас, ничего не написано в ваших NSUserDefaults – TompaLompa

+0

Я добавил этот код (он запускается, когда приложение заканчивает загрузку): 'NSMutableArray * array = [[NSMutableArray alloc] init]; [defaults setObject: array forKey: @ "избранное"]; ' массив пуст. Но ничего не изменилось :) – SmartTree

+0

не для ключевых фаворитов? – TompaLompa

1

В этой строке

favorites = [[NSMutableArray alloc]initWithArray:[newDefaults mutableArrayValueForKey:@"favorites"] copyItems:YES]; 

nil в настоящее время назначен favorites. Причиной этого является то, что newDefaults только что построен на предыдущей строке и пуст.

+0

Я думал, что как только вы создали ключевые «избранные» (например, в другом классе), я смогу использовать его во всех объектах NSUserDefaults, которые я создал в своем приложении. Поэтому я должен использовать только один NSUserDefaults? – SmartTree

+0

Это прекрасно, чтобы создать другой дескриптор по умолчанию, но вам нужно убедиться, что значение добавляется _before_, этот код запускается. –

1

Когда приложение заканчивает загрузку добавить следующее:

NSMutableArray *array = [[NSMutableArray alloc]init]; 
[defaults setObject:array forKey:@"favorites"]; 
[defaults synchronize]; 
+0

Отлично! Он работает сейчас. Спасибо ! – SmartTree

+0

Добро пожаловать! Удачи! – TompaLompa

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