从使用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];
}
答案 0 :(得分:0)
如果在尝试将对象添加到可变数组时崩溃,通常意味着您正在尝试添加nil对象。我看到你在你的可变数组中添加任何内容的唯一地方(在上面的代码片段中)是你没有从CFPreferences获得有效的“cfArray
”。你应该确保“[info objectForKey:@"buttonIdentifier"]
”没有返回nil。
检查以确保您没有抛出异常。或者如果不是这样,请说明你的崩溃究竟是什么(它会在Xcode的控制台日志中说明。)