0

我在使用 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];

}

4

1 回答 1

0

如果在尝试将对象添加到可变数组时崩溃,这通常意味着您正在尝试添加 nil 对象。我看到您向可变数组添加任何内容的唯一地方(在上面的代码片段中)是在您没有cfArray从 CFPreferences 获得有效的“”的情况下。你应该确保 " [info objectForKey:@"buttonIdentifier"]" 没有返回 nil。

检查以确保您没有抛出异常。或者,如果不是这样,请说出您的崩溃到底是什么(它会在 Xcode 的控制台日志中说明)。

于 2012-05-10T18:38:13.423 回答