#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 также сохраняет его. Таким образом, не должно быть необходимости в дополнительном сохранении, только показанный выпуск.