我不断收到以下错误:

saving dictionary error Property list invalid for format (property lists cannot contain objects of type 'CFNull')


当我尝试使用以下代码保存文件时:

- (BOOL)saveDictionary:(NSDictionary *)dict toFile:(NSString *)file {
    BOOL success = NO;
    if (file == nil || dict == nil) return NO;

    NSString *errorStr = nil;
    NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:dict
                                                                   format:NSPropertyListBinaryFormat_v1_0
                                                         errorDescription:&errorStr];
    if (errorStr) {
        // Darn.
        NSLog(@"saving dictionary error %@", errorStr);
        [errorStr release];
    } else {
        //    [plistData writeToFile:file atomically:YES];
        // (ankit): Changing this to NO for speed.
        success = [plistData writeToFile:file atomically:NO];
    }

    return success;
}


知道为什么吗?

最佳答案

该方法非常好,正是NSDictionary中的内容导致了该错误。由于将其保存为plist文件,因此字典中的所有内容都应仅包含NSString,NSDate,NSArray,NSDictionary,NSNumber和NSData。除这些以外的其他任何情况都会导致与您上面的错误类似的错误。因此,请仔细检查字典中的内容,如果对象的任何类都不在上面的列表中,请先将对象放入NSData,然后再将其放入字典中。

07-28 06:29