2012-04-26 14 views
0

私はplistにいくつかの設定をしていますが、私がアプリケーションを終了するとそこに保存されているすべてのデータが失われます。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]; 

} 

は、私が何か間違ったことをしています:

これは私が使用しているコードはありますか?私は別のクラスまたはdifferentsメソッドを使用する必要がありますか?なぜ私は情報を保存するのか分からないので私を助けてください。しかし、私はそれを失うアプリを殺すときに私を助けてください。

答えて

1

すでに説明したように、バンドルは読み取り専用です。

コピーされたplistに 'settings'を設定しないようにしてください.plistsはもう1つの管理対象です。代わりに、デフォルトのplistのNSUserDefaults and import your defaultsを使用しないでください。たとえば、プロジェクトに新しい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は、プラットフォーム、ユーザー、またはデバイス固有のものです!

希望すると便利です。

+0

あなたの答えは良いです!あともう一つだけ; appDelegate.mでは、最初のコードブロックをどこに書く必要がありますか? – adr

+0

私は 'applicationDidFinishLaunching'が良いと感じています:) –

1

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

関連する問題