У меня возникла проблема с доступом/установкой объекта из/в NSArray, возвращаемым с помощью метода CFPreferencesCopyAppValue(). Мое приложение падает в этом случае, тогда как когда я сам выделяю/запускаю его, все работает хорошо.NSArray сбой приложения при обращении к нему
CFArrayRef cfArray;
if ((cfArray = (CFArrayRef)CFPreferencesCopyAppValue(CFSTR("buttonsOrder"), appID))) {
NSArray *castedArray = [(NSArray *)cfArray retain];
NSLog(@"castedArray : %@", castedArray);
buttonsOrder = [castedArray mutableCopy];
NSLog(@"buttonsOrder : %@", buttonsOrder);
CFRelease(cfArray);
[castedArray release];
castedArray = nil;
}
else {
buttonsOrder = [[NSMutableArray alloc] init];
for (NSMutableDictionary *info in togglesInfo) {
[buttonsOrder addObject:[info objectForKey:@"buttonIdentifier"]];
}
}
PS: NSLog() показывает мне, что CFArray возвращается хорошо и отливают в NSArray, а затем NSMutableArray тоже хорошо.
Любая идея?
Edit:
Вот как я modofy массив:
- (void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSUInteger fromIndex = [fromIndexPath row];
NSUInteger toIndex = [toIndexPath row];
if (fromIndex == toIndex)
return;
NSString *movedButtonId = [[[buttonsOrder objectAtIndex:fromIndex] retain] autorelease];
[buttonsOrder removeObjectAtIndex:fromIndex];
[buttonsOrder insertObject:movedButtonId atIndex:toIndex];
}
У вас есть веская причина, почему вы используете CFPreferences вместо NSUserDefaults? Кроме того, где происходит катастрофа и что такое * * сбой? –
Нет причин для прохождения этого литья/удержания. Вы можете просто взять свою изменчивую копию, а затем выпустить оригинальный 'CFArray'. –
я. Я не получаю доступ к настройкам текущего приложения, поэтому я не могу использовать NSUserDefaults (или я не знаю, как для другого приложения текущего). Сбой происходит, когда я пытаюсь получить доступ (удалить или добавить значения) в массив. Сбой заставит приложение выйти. Спасибо за ваш ответ – DiAifU