我试图弄清楚如何将NSDate值保存到我的应用程序中的plist文件中。
我目前正在这样做,但我被困在实际部分,我必须保存它。
NSString *datePlistPath = [[NSBundle mainBundle] pathForResource: @"my-Date" ofType: @"plist"];
NSMutableDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: datePlistPath];
// to be saved to plist
NSDate *date = [NSDate date];
// this is where I start to get abit lost, I want to set the date to the right plist value then commit the changes
[dict setObject:date forKey:@"my-Date"];
[dict writeToFile:datePlistPath atomically:YES]; // error happening here.
任何帮助将不胜感激
更新:一旦它到达最后一行代码,就会产生错误......
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFDictionary setObject:forKey:]:发送到immutable对象的mutating方法'
答案 0 :(得分:2)
使用 NSMutableDictionary dictionaryWithContentsOfFile
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile: datePlistPath];
如果你使用 NSDictionary dictionaryWithContentsOfFile
,提供你的NSDictionary 而不是NSMutableDictionary此外,您无法更新应用程序包中的plist而是存储在文档目录中。
答案 1 :(得分:1)
我认为您的案例中的解决方案很简单,如
替换
NSMutableDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: datePlistPath];
与
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile: datePlistPath];
答案 2 :(得分:1)
NSMutableDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: datePlistPath];
将NSDictionary
替换为NSMutableDictionary
。
答案 3 :(得分:0)
您无法将文件写入
一个NSBundle
。文件只能存储在Documents目录,临时目录和一些预定义的位置。您可以尝试以下代码。它对我来说很好。
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString * filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@ “file.plist”];
NSDate *currentDate = [NSDate date]; NSMutableDictionary *d = [NSMutableDictionary new]; [d setObject:currentDate forKey:@"my-date"]; [d writeToFile:filePath atomically:YES];
答案 4 :(得分:0)
您无法写入自己捆绑中的文件。您没有准确说明使用日期的内容,但如果您只想在启动时保留此NSDate,则可能需要将此日期写入NSUserDefaults。
您编写代码的代码如下:
[[NSUserDefaults standardUserDefaults] setObject:date forKey:@"my-Date"];
并回读它你会做
NSDate* myDate = (NSDate*)[[NSUserDefaults standardUserDefaults] objectForKey:@"my-Date"];
// Be prepared for a nil value if this has never been set.