2012-01-04 77 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

*任何*其他人?他們是在做不同的事情,還是在不同的事情上運行? – 2012-01-04 19:53:24

回答

0

我認爲你的意思是另一個人在你的電腦上。他們無法閱讀你寫給你的用戶默認值的原因是因爲NSUserDefaults是用於用戶的特定值。爲了節省應用程序能夠從您的用戶帳戶和其他用戶帳戶訪問的內容,您需要將它放在存儲在系統共享位置某處的文件中。一種方法是這樣的:

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

您應該嘗試使用valueForKey而不是objectForKey。看看你的代碼,沒有理由不應該爲一個人而不是另一個人工作。

一個例外是如果您使用settings.bundle中的默認值。在用戶首次打開設置頁面之前,存儲在settings.bundle中的用戶默認值不會被初始化。