NSArray在访问应用程序时崩溃



我在访问/设置对象时遇到问题,该对象来自/设置使用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 的控制台日志中说(。

最新更新