将NSDate值保存到plist

时间:2012-09-19 03:39:23

标签: iphone ios plist nsdate

我试图弄清楚如何将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方法'

5 个答案:

答案 0 :(得分:2)

使用 NSMutableDictionary dictionaryWithContentsOfFile

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile: datePlistPath];

如果你使用 NSDictionary dictionaryWithContentsOfFile

提供你的NSDictionary 而不是NSMutableDictionary

此外,您无法更新应用程序包中的plist而是存储在文档目录中。

参考dit-objects-in-array-from-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。

这里的文件: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/

您编写代码的代码如下:

[[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.