在完成许多教程,其他人的问题并亲自尝试后,我无法将文件写入plist。我可以毫无问题地读取plist,但我无法更新它。下面是关于我如何将数据写入plist的代码。如果我犯了任何错误,请纠正我。
NSString *path = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"];
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
NSArray* allmyData = [myDictionary allValues];
// creates and array to store only the event details
NSMutableArray *data = [[NSMutableArray alloc] initWithArray:allmyData];
[data addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:tfAddress.text, @"Address", tvEvents.text, @"Events", nil]];
[myDictionary setValue:data forKey:@"Whampo"];
BOOL flag = [myDictionary writeToFile:path atomically:YES];
if (flag){
NSLog(@"write to plist success");
}
NSLog(@"%@", myDictionary);
[myDictionary release];
路径正确,文件存在,textView和textField中的值在数组中,但是当涉及到writeToFile时,它不会反映在位于文档目录的文件中。
编辑01:
我在网上找到了这个,与Nekto的建议非常相似。但我正在考虑如何用他的代码实现我的代码。我认为它非常简单,但我似乎无法弄清楚如何。
NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *plistDirectory = [NSString stringWithFormat:@"%@/Enterprise",documentDirectory];
NSString *mPath = [plistDirectory stringByAppendingPathComponent:@"Downloads.plist"];
[mDownloadsArray writeToFile:mPath atomically:YES];
iphonesdk.blogspot取自该网站。
编辑02:
我使用了Nekto的建议并且效果很好。但我很好奇为什么它返回DocumentsEventAddress.plist而不是EventAddress.plist。我的假设是因为
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *plistPath = [rootPath stringByAppendingString:@"EventAddress.plist"];
rootPath返回的地方Document
是吗?
答案 0 :(得分:1)
我正以这种方式写文件:
NSString *errorDesc = nil;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *plistPath = [rootPath stringByAppendingString:TEMPLATES_PATH];
NSDictionary *dict = [NSDictionary dictionaryWithObject:templates forKey:@"templates"];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:dict format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc];
if (plistData)
{
[plistData writeToFile:plistPath atomically:YES];
}else
{
NSLog(@"[Error] Application Did Enter Background {saving file error}: %@", errorDesc);
[errorDesc release];
}
请务必将文件保存在应用程序文档目录中。
答案 1 :(得分:0)
我不相信你可以写信息。只能写入文档目录中的文件。
答案 2 :(得分:0)
您无法写入位于Bundle中的文件。 应用包是只读的。