iphone - writeToFile 没有将新条目保存到 plist

Posted

技术标签:

【中文标题】iphone - writeToFile 没有将新条目保存到 plist【英文标题】:iphone - writeToFile not saving new entry into plist 【发布时间】:2010-07-01 07:53:00 【问题描述】:

我的 writeToFile 没有将我的数据保存到我的 .plist。

- (IBAction)clickBtnDone:(id) sender 
 NSLog(@"Done");
 if ([txtGroupName.text length] > 0)   
  [self dismissModalViewControllerAnimated:YES];
  NSLog(@"Group Name: %@", txtGroupName.text);
  NSMutableArray *newDict = [[NSMutableArray alloc] init];
  [self.groups setObject:newDict forKey:txtGroupName.text];
  NSLog(@"Count:%d", [self.groups count]);

  BOOL success = [self.groups writeToFile:self.groupPath atomically:YES];
  if(success)  
   NSLog(@"Success Saving New Group");
   else 
   NSLog(@"Failure Saving New Group");
  
  [newDict release];
 

调试显示如下:

2010-07-01 00:48:38.586 Contacts[7111:207] Done
2010-07-01 00:48:38.589 Contacts[7111:207] Group Name: C
2010-07-01 00:48:38.590 Contacts[7111:207] Count:3
2010-07-01 00:48:38.592 Contacts[7111:207] Success Saving New Group

但是,当我打开 .plist 文件时,它仍然只有我手动创建的 2 个组,而不是新条目。

这些文件位于我的 ~Documents 文件夹中。

有什么想法吗?

【问题讨论】:

什么是组路径,能打印出来吗? NSString *path = [[NSBundle mainBundle] pathForResource:@"Groups" ofType:@"plist"]; self.groupPath = 路径; 看起来它正在写入:/Users/Me/Library/Applications Support/iPhone Simulator/4.0/Applications/.../Groups.plist 有没有办法让它保存到我工作区中的 .plist? 【参考方案1】:

你是如何初始化 groupPath 的?它应该是文档目录的路径,而不是资源目录的路径。

你应该做类似的事情:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:FILE_NAME];

您无法编辑工作区中存在的文件。

【讨论】:

【参考方案2】:
NSString* plistPath = nil;
NSFileManager* manager = [NSFileManager defaultManager];
 if ((plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"PathTo.plist"])) 
   
    if ([manager isWritableFileAtPath:plistPath]) 
     
       NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
      [infoDict setObject:@"foo object" forKey:@"fookey"];
      [infoDict writeToFile:plistPath atomically:NO];
      [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil];
     
   

【讨论】:

以上是关于iphone - writeToFile 没有将新条目保存到 plist的主要内容,如果未能解决你的问题,请参考以下文章

writeToFile 没有写入文件

通过共享扩展从图库中保存照片时 NSData WriteToFile 失败

writeToFile 输出 .plist 没有写入正确的值

NSData writeToFile 返回 NO 没有任何错误

writeToFile 不适用于 NSDictionary [重复]

将新视图推送到UINavigationController iPhone SDK