2012-01-04 5 views
0

私はココアアプリケーションを開発しています。私はこのコードでユーザー・デフォルト・オブジェクト作成:NSUserDefaultsの空の値

NSUserDefaults *standard_user_defaults = [NSUserDefaults standardUserDefaults]; 

if (standard_user_defaults) { 
    [standard_user_defaults setObject:myString forKey:key]; 
    [standard_user_defaults synchronize]; 
} 

をそして、私はこのコードを使用して値を取得しています:

NSUserDefaults *standard_user_defaults = [NSUserDefaults standardUserDefaults]; 
NSString *val = nil; 

if (standard_user_defaults) 
    val = [standard_user_defaults objectForKey:key]; 

問題は、私は自分のコンピュータでこのアプリケーションを実行する場合に動作していることです私はユーザーのデフォルト値を得ることができますが、別の人がアプリケーションを実行すると空の値が得られます。何か案は?

+0

* *他の人ですか?彼らは何か違うことをやっているの? –

答えて

0

「別の人」とは、コンピュータ上の別のユーザーを意味します。 NSUserDefaultsはユーザー固有の値を意味するため、ユーザーがユーザーのデフォルトに書き込んだ内容を読み込めない理由があります。アプリケーションがあなたのユーザーアカウントと他のユーザーの両方からアクセスできるようにするには、システム上の共有場所のどこかに保存されているファイルに配置する必要があります。これを行う1つの方法は次のようなものです:

NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSLocalDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [basePath stringByAppendingPathComponent:@"someFileName"]; 

// write: 
NSDictionary *dataToSave = [NSDictionary dictionaryWithObjectsAndKeys:theValue, @"someKey", nil]; 
if(filePath && [dataToSave writeToFile:filePath atomically:YES]) 
{ 
    // success! 
} 

// read: 
NSDictionary *dataToLoad = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
if(dataToLoad) 
{ 
    // success! 
    NSString *theValue = [dataToLoad objectForKey:@"someKey"]; 
} 
0

objectForKeyではなく、valueForKeyを試してみてください。あなたのコードを見ると、1人ではなく他人ではうまくいかない理由はありません。

ただし、settings.bundleのデフォルトを使用している場合は例外です。ユーザーデフォルトのsettings.bundleに格納された値は、ユーザーが初めて設定ページを開くまで初期化されません。