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にもキャストされることを示しています。
何か案が ?
編集 :
配列を変更する方法は次のとおりです。
- (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];
}