2012-04-13 5 views
2

Прежде чем кто-нибудь скажет, что вопрос, который задавали много раз раньше, я провел около 20 различных ответов и попробовал все, что нашел. Несмотря на это, я начал работу только около 5 дней назад, так что, возможно, действительно очень простое решение.NSUserDefaults not loading string array

Похоже, что NSUserDefaults не загружает массив из списка свойств по умолчанию, несмотря на то, что он вызван разными способами. Прежде чем я продолжу, вот мой код для чтения массива:

 fishArrayMutable = [[NSMutableArray alloc] initWithArray:(NSArray*)[defaults objectForKey:@"fishArray"] copyItems:TRUE]; 

    if (fishArrayMutable == nil) 
    { 
     fishArrayMutable = [[NSMutableArray alloc] init]; 
     UIAlertView *alert = [[UIAlertView alloc] init]; 
     [alert setTitle:@"fishArray = nil"]; 
     [alert addButtonWithTitle:@"Ok"]; 
     [alert show]; 
     [alert release]; 
    } 

А вот мой код для записи массива:

[defaults setObject:fishArrayMutable forKey:@"fishArray"]; 

[defaults synchronize]; 

Это начинает становиться очень расстраивает проблема сейчас, и я пошел о способах изолировать проблему и пришел к выводу, что ее в читающей части. Массив Mutable объявляется в файле заголовка. Пожалуйста, помогите, это было давало мне покоя в течение около 6 часов теперь ...

+0

Какие объекты вы вкладываете в fishArray? –

+0

Струны, названия вашей рыбы. Theres также массив, называемый fishSizeArray, который идентичен – DuskFall

+0

Я здесь перепутался. Когда вы устанавливаете объект по умолчанию? прежде чем выделить его .. ?? coz вы выделяете fishArrayMutable и то же время, когда запрашиваете, что fishArrayMutable хранится в значениях по умолчанию. Так что я смущен. !! Pls помогите мне, если я что-то упустил –

ответ

3

Я подозреваю, что ошибка одна из:

  1. defaults не инициализирован.
  2. UserDefaults не заданы перед чтением
  3. userDefaults написано ранее.

Прерывать каждый шаг вниз и записывать тесты до и после каждого шага.

1) NSLogfishArrayMutable где он написан для проверки содержимого массива.
2) Immediatly после записи fishArrayMutable по умолчанию NSLog пользовательские настройки по умолчанию. Пример:

NSLog(@"Before writing fishArray: %@", fishArrayMutable); 
[defaults setObject:fishArrayMutable forKey:@"fishArray"]; 
NSLog(@"After writing fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]); 

Обратите внимание, что NSLog заявления делать не использование defaults держать их самодостаточными.

ли подобные заявления NSLog BRACKETING чтения (и делают прочитали два заявления):

NSLog(@"Before reading fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]); 
NSArray *fishArray = [defaults objectForKey:@"fishArray"]; 
NSLog(@"After reading fishArray: %@", fishArray); 
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE]; 
NSLog(@"After creating fishArrayMutable: %@", fishArrayMutable); 

Тогда задача должна быть достаточно очевидна.

Примечания: так как элементы массива сам будет неизменно из-за NSUserDefaults вместо:
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
вы должны быть в состоянии использовать только mutableCopy:
fishArrayMutable = [fishArray mutableCopy];

1

попробуйте использовать mutableArrayValueForKey проверки этого link

Используйте его следующим образом:

fishArrayMutable = [[NSMutableArray alloc] initWithArray:[defaults mutableArrayValueForKey:@"fishArray"]]; 

это работает для меня

EDIT:

записывания:

[defaults setObject:fishArrayMutable forKey:@"fishArray"]; 
[defaults synchronize]; 

нагрузка:

NSMutableArray *array = [defaults mutableArrayValueForKey:@"fishArray"]; 
+0

??? не получил его. – Frade

+0

Вы пытались загрузить массив, как я указал? Я загружаю mutablearray как это и никогда не имел проблем .. на самом деле в AppStore – Frade

+0

Нет проблем, но класс интересен, а не то, что можно было бы ожидать: 'NSLog (@" array className:% @ ", NSStringFromClass ([array class])); '' 'NSKeyValueSlowMutableArray'. – zaph