Перенос массива строк в массив словарей, каждый из которых содержит строку

#iphone

#iPhone

Вопрос:

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

На данный момент у меня есть:

 <array>
-<string1>
-<string2>
...
</array>
  

Но я хочу:

 <array>
-<dictionary1>
--<string1>
--<bool>
-</dictionary1>
-<dictionary2>
--<string2>
--<bool>
-</dictionary2>
...
</array>
  

Я пытался создать цикл для циклического перебора массива строк, но, похоже, это не работает.

Конечная цель — сохранить этот новый массив словарей в NSUserDefaults (с которым я также довольно незнаком). Это то, что у меня есть на данный момент, и я был бы признателен за любую помощь!

 // Get the current array from the user defaults.
NSArray *tempArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"myArrayKey"];
self.myArray = [tempArray mutableCopy];

// Loop to cycle through the array of strings
for(int i = 0; i < [aList count]; i  )
{
    // Boolean to go in the dictionary with the string.
    checked = NO;

    // Create a dictionary, and set it with two objects and two keys. 
   //First object is the string in the array we are cycling through, the second object is the boolean.
    NSDictionary *tempDict = [[NSDictionary alloc] initWithObjectsAndKeys:[aList objectAtIndex:i], @"Title", checked, @"checked", nil];

    // Add this dictionary to the new array of dictionaries.
    [self.myArray addObject:tempDict];

    // This NSLog gives me 0 - but gives me  0 seven times (the number of items in the array I am cycling through) so it is definitely cycling through the array.
    NSLog(@"My Array Count: %i", [myArray count]);

    // Release the tempDict.
    [tempDict release];

}

// Write this new array of dictionaries back to NSUseDefaults.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myArray forKey:@"myArrayKey"];
[defaults synchronize];
  

Комментарии:

1. Как объявлено свойство myArray? У вас есть @synthesize для этого? Являются myArray и self. myArray такой же?

2. Кроме того, tempArray вообще существует? Если это значение равно нулю, mutableCopy выдаст значение nil, AddObject ничего не выполнит, и [myArray count] будет равен нулю.

3. Да, проблема была в том, что tempArray на самом деле не существовал, как и nil. Когда я присвоил ему некоторые значения, а затем запустил цикл, он работал нормально. Спасибо за вашу помощь, думаю, я знаю, что сделать, чтобы заставить его работать должным образом сейчас.

4. Опубликуйте это как ответ, и я отмечу его, если хотите

Ответ №1:

Как указал Дэниел (и я вскоре понял с помощью некоторых тестов), тот факт, что массив из NSUserDefaults был равен нулю, остановил его работу.

Ответ №2:

Как насчет вставки строки

 [tempDict retain];
  

Далее

[self.myArray AddObject:tempDict];

Комментарии:

1. Я не уверен, что это идеальный ответ, но это может решить проблему.

2. Параметр tempDict сохраняется в alloc. AddObject также сохраняет его. Таким образом, не должно быть необходимости в дополнительном сохранении, только показанный выпуск.