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

すでに述べたように、バンドルは読み取り専用です。

コピーされたplistに「設定」を設定することは避けてください。plistはもう1つ管理する必要があるためです。代わりに、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 に答える
1

アプリケーションバンドルは読み取り専用です。ファイルを配布してから更新する場合は、アプリケーションを初めて実行するときに、ファイルをバンドルからドキュメントフォルダーに移動します。

于 2012-04-26T16:29:52.790 に答える