【问题标题】:Write Array to a file ArchiveRootObject将数组写入文件 ArchiveRootObject
【发布时间】:2012-07-30 09:52:34
【问题描述】:
    NSMutableArray *esami = [[NSMutableArray alloc] init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains
    (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    //make a file name to write the data to using the
    //documents directory:
    NSString *fullFileName = [NSString stringWithFormat:@"%@/new", documentsDirectory];
    esami = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];
    Esame *add=[[Esame alloc]initWithNome:materia voto:voto crediti:crediti anno:anno];
    [esami addObject:add];
    [NSKeyedArchiver archiveRootObject:esami toFile:fullFileName];

我无法理解为什么这段代码不起作用.. 如果我使用已经写入根目录的文件,我可以将新元素添加到我的数组并写入它,但如果我使用另一个文件(在这种情况下是新文件),它就不起作用了。

【问题讨论】:

  • 不要重新发明轮子。应该是NSString *fullFileName = [documentsDirectory stringByAppendingPathComponent:@"new"];
  • 没关系,但不会改变任何东西!
  • 我知道,这就是为什么我没有将其添加为 asnwer 而是作为评论。

标签: iphone objective-c nskeyedarchiver


【解决方案1】:

我不知道为什么,但我用这段代码解决了这个问题

NSMutableArray *esami = [NSKeyedUnarchiver unarchiveObjectWithFile:fullFileName];

if(esami.count==0){
    NSMutableArray *esamiNew=[[NSMutableArray alloc] init];
    [esamiNew addObject:[[Esame alloc]initWithNome:materia voto:voto crediti:crediti anno:anno]];

    [NSKeyedArchiver archiveRootObject:esamiNew toFile:fullFileName];

}
else{

    [esami addObject:[[Esame alloc]initWithNome:materia voto:voto crediti:crediti anno:anno]];
    NSLog(@"num %d",esami.count);
    [NSKeyedArchiver archiveRootObject:esami toFile:fullFileName];

}

这是一个错误吗??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多