如何在Xcode 5 iOS 7中以编程方式编辑plist?
如何从以下位置编辑或更改值字符串:
how can I edit or change a value string from:
在此plist中,我需要更改或在第2项的启用值"中设置否",我看到了很多示例,但没有用,或者已弃用,或者不使用ARC,任何构想或示例代码?请帮助大家
in this plist I need change or Set "NO" in Enabled Value from Item 2, I see a lot examples, but not working, or are deprecated, or don't use ARC, any idea or example code? please help guys
EDIT#1:我尝试这样做(不起作用)
EDIT#1: I try this (not work)
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
path = [path stringByAppendingPathComponent:@"List.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:path]) {
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:CONTENT_DEFAULT ofType:PLIST];
[fileManager copyItemAtPath:sourcePath toPath:path error:nil];
}
NSArray* newContent = [[NSArray alloc]initWithContentsOfFile:path];
NSDictionary *Dict = [[NSDictionary alloc]initWithDictionary:[newContent objectAtIndex:2]];
[Dict setValue:@"NO" forKey:@"Enabled"];
[Dict writeToFile:path atomically:YES];
注意:不起作用,它崩溃后发给我:
NOTE: not work, it crashes send me:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSDictionaryI 0x15de7ff0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Enabled.', or Im wrong in something?
编辑#2新尝试
NSString *path = [[NSBundle mainBundle] pathForResource:@"List" ofType:@"plist"];
NSString *savingPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSArray* newContent = [[NSArray alloc]initWithContentsOfFile:path];
NSMutableDictionary *Dict = [[NSMutableDictionary alloc]initWithDictionary:[newContent objectAtIndex:2]];
[Dict setValue:@"NO" forKey:@"Enabled"];
savingPath = [savingPath stringByAppendingPathComponent:@"Modified.plist"];
[Dict writeToFile:savingPath atomically:YES];
NSLog(@"newContent:%@",newContent);
NSArray *newnew = [[NSArray alloc]initWithContentsOfFile:savingPath];
NSLog(@"newnew:%@",newnew);
注意:现在打印出崩溃信息:
NOTE: now print me a crash:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (3) beyond bounds (2)'
您要做的就是使用NSMutableDictionary
而不是常规词典来修改内容.您必须始终检查要编辑的对象是否在那里.
All you have to do is to use NSMutableDictionary
instead of a regular dictionary to modify stuff. You have to always check that the object you are editing is there.
要获取在Xcode
中创建的plist的正确路径,您需要使用:
To get the right path for the plist you created in Xcode
you need to use:
NSString *path = [[NSBundle mainBundle] pathForResource:@"List" ofType:@"plist"];
您实际上可能希望将该文件保存到应用程序的文档目录中.因此,您可以使用以下路径保存内容:
You might actually want to save that file into the app's document directory. So you would use the following path for saving the content:
NSString *savingPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
savingPath = [savingPath stringByAppendingPathComponent:@"Modified.plist"];
[Dict writeToFile:savingPath atomically:YES];