我在访问/设置对象时遇到问题,该对象来自/设置使用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];
}
如果您在尝试将对象添加到可变数组时崩溃,这通常意味着您正在尝试添加 nil 对象。 我看到您向可变数组添加任何内容的唯一地方(在上面的代码片段中(是您没有从 CFPreference 获得有效的"cfArray
"的情况。 你应该确保"[info objectForKey:@"buttonIdentifier"]
"没有返回nil。
检查以确保没有引发异常。 或者,如果不是这样,请说出您的崩溃到底是什么(它会在 Xcode 的控制台日志中说(。