CFPreferencesCopyAppValue()メソッドで返されたNSArrayからオブジェクトへのアクセス/設定に問題があります。この場合、私のアプリケーションはクラッシュしますが、自分自身でalloc/initを実行すると、すべてうまく動作します。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のにキャストされていることを私に示しています。
編集:ここでは
私は配列を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];
}
NSUserDefaultsの代わりにCFPreferencesを使用している理由はありますか?また、クラッシュは実際にどこで起こりますか?クラッシュは何ですか? –
その鋳造/保持を行う理由はありません。変更可能なコピーを取り出し、元の 'CFArray'を解放するだけでよいのです。 –
です。私は現在のアプリケーションの設定にアクセスしていないので、私はNSUserDefaultsを使用することはできません(または私は現在のものの別のアプリケーションのための方法を知らない)。クラッシュは、配列にアクセスしようとしている(値を削除または追加しようとしている)ときに発生します。クラッシュによってアプリが終了します。 お返事ありがとう – DiAifU