修改plist不起作用

时间:2011-06-16 07:57:10

标签: iphone objective-c ios plist

我必须修改与bundle一起存储的plist文件中的BOOL值。我能够访问我必须修改的字典。从nslogging我可以看到dict用新值更新,但问题是当我检查捆绑中的plist时,它没有被修改。有关为什么它没有更新plist的任何线索

  NSString* plistPath = nil;
        NSFileManager* manager = [NSFileManager defaultManager];
        if (plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"TopicsList.plist"]) 
        {
            if ([manager isWritableFileAtPath:plistPath]) 
            {
                NSMutableArray* dictarrays = [NSMutableArray arrayWithContentsOfFile:plistPath];
                NSMutableDictionary *dict=[dictarrays objectAtIndex:indexPath.row];
                NSLog(@"%@ ",dict );

                [dict setObject:[NSNumber numberWithBool:YES] forKey:@"isPaid"];

                NSLog(@"%@ ",dict );
                [dict writeToFile:plistPath atomically:NO];
                    NSLog(@"%@ ",dict );
                [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:&error];
            }
        }

3 个答案:

答案 0 :(得分:5)

plist是你资源的一部分吗?不确定我们是否可以在那里编辑一个plist。将plist复制到应用程序的Documents文件夹并在那里更新。

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"TopicsList.plist"];

success = [fileManager fileExistsAtPath:plistPath];
if(!success){
    //file does not exist. So look into mainBundle
    NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TopicsList.plist"];
    success = [fileManager copyItemAtPath:defaultPath toPath:plistPath error:&error];
}

现在无论您需要对plist进行任何更改,还是从plist中读取数据,请从Documents文件夹中的副本中读取它。

答案 1 :(得分:0)

您必须将plist存储在文档目录中。之后,您还必须在离开应用程序时保存plist。否则,plist位于主束中,无法修改。

答案 2 :(得分:0)

有任何错误

检查

NSError *error = nil
[dict writeToFile:plistPath atomically:YES encoding:NSASCIIStringEncoding error:&error];

if (error) {
  NSLog(@"Error: %@", [error description]);
} else {
NSLog(@"Success");
}