首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSArray writeToFile失败

NSArray writeToFile失败
EN

Stack Overflow用户
提问于 2010-06-10 06:11:34
回答 2查看 17.5K关注 0票数 21

我试图将一个数组保存到plist文件中,但失败了。我没有得到任何错误。我在代码中使用另一个数组做了与上面几行完全相同的操作,这是可行的。我不明白为什么它不保存文件。

这是我保存文件的地方:(参见下面的一些调试器输出)

代码语言:javascript
复制
// When built parse through dictionary and save to file
    for ( NSString *keys in [dicByCountry allKeys] )
    {
        NSArray *arrr = [[NSArray alloc] initWithArray:[dicByCountry objectForKey:keys]];
        NSString *fname = [self filePath:[NSString stringWithFormat:@"regions.cid%@.plist",keys]];
        if (![arrr writeToFile:fname atomically:YES])
            NSLog(@"Could not write file regions.cid%@.plist",keys);
    }

下面是一些GDB输出。

代码语言:javascript
复制
(gdb) po fname
/Users/chris/Library/Application Support/iPhone Simulator/4.0/Applications/44A9FF9E-5715-4BF0-9BE2-525883281420/Documents/regions.cid0.plist


(gdb) po arrr
<__NSArrayI 0x8022b30>(
{
    countryID = "<null>";
    region = "?\U00e2vora";
    regionID = 16;
},
{
    countryID = "<null>";
    region = Vicenza;
    regionID = 14;
},
{
    countryID = "<null>";
    region = Wales;
    regionID = 23;
}
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-10 09:10:46

如果仔细阅读the documentationwriteToFile:atomically:期望数组只包含可以写入plist文件的对象。

仅以下类型的对象:

  • NSString
  • NSData
  • NSDate
  • NSNumber
  • NSArray
  • NSDictionary

是被允许的。如果要保存的数组中有数组或字典,则将按照相同的标准检查它们的值。

这比通常在NSArray中允许的限制要多一些,特别是,值[NSNull null]是不可接受的。

票数 37
EN

Stack Overflow用户

发布于 2012-04-26 19:02:47

在序列化之前,我将NSArray或NSDictionary转换为NSData。以下是nsarray上用于序列化和反序列化的类别。这个comfortableby处理一些nsnull的数据

代码语言:javascript
复制
@implementation NSArray(Plist)

-(BOOL)writeToPlistFile:(NSString*)filename{
    NSData * data = [NSKeyedArchiver archivedDataWithRootObject:self];
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentsDirectory = [paths objectAtIndex:0];
    NSString * path = [documentsDirectory stringByAppendingPathComponent:filename];
    BOOL didWriteSuccessfull = [data writeToFile:path atomically:YES];
    return didWriteSuccessfull;
}

+(NSArray*)readFromPlistFile:(NSString*)filename{
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * documentsDirectory = [paths objectAtIndex:0];
    NSString * path = [documentsDirectory stringByAppendingPathComponent:filename];
    NSData * data = [NSData dataWithContentsOfFile:path];
    return  [NSKeyedUnarchiver unarchiveObjectWithData:data];
}

@end //needs to be set for implementation
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3010363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档