0

我在 plist 中有一些设置,但是当我杀死我的应用程序时,我丢失了存储在那里的所有数据。

这是我正在使用的代码:

。H

@property (retain, nonatomic) NSString *plistFilePath;
-(IBAction)setHomepage:(id)sender;

.m

@syntehzise plistFilePath;

-(IBAction)setHomepage:(id)sender{
plistFilePath = [NSString stringWithString:[[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]];
    NSMutableDictionary *data= [[NSMutableDictionary alloc] initWithContentsOfFile:plistFilePath];
    [data setObject:@"http://www.google.com" forKey:@"Homepage"];
    [data writeToFile:plistFilePath atomically:YES];
    [data release];  

}

难道我做错了什么?我应该使用不同的类还是不同的方法?请帮助我,因为我不知道为什么我会很好地存储信息,但是当我杀死应用程序时,我会丢失它。

4

2 回答 2

1

应用程序包是只读的。如果您想分发文件然后对其进行更新,请在您的应用程序首次运行时将其从捆绑包中移至文档文件夹。

于 2012-04-26T16:29:52.790 回答
1

如前所述,捆绑包是只读的。

尽量避免在复制的 plist 中设置“设置”,因为 plist 只是要管理的另一件事。相反,为什么不使用NSUserDefaults 并从默认 plist 中导入您的默认值。例如,向您的项目添加一个新的 plist,并将其添加到您的委托:

// Get the shared defaults object
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// Register the defaults each time the app loads
NSString *defaultsFile = [[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"];
NSDictionary *defaultsDict = [NSDictionary dictionaryWithContentsOfFile:defaultsFile];
[defaults registerDefaults:defaultsDict];

现在您可以像这样保存数据:

// Store the data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"http://mattmelton.co.uk" forKey:@"HomePage"];
[defaults synchronize];

并像这样检索它:

// Retrieve data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *homePage = [defaults objectForKey:@"HomePage"];

而且您不必担心外部文件。当然,您的默认 plist 可以是平台、用户或设备特定的!

希望这可以帮助!

于 2012-04-26T17:11:42.073 回答