2011-12-08 60 views
1

我的應用程序從NSUserDefaults加載時出現一個非常奇怪的問題。 這是我的appDelegate代碼:從NSUserDefaults加載時出現問題

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *user = [[NSString alloc]initWithString:[defaults objectForKey:@"_settingsUsername"]]; 
NSString *password = [[NSString alloc]initWithString:[defaults objectForKey:@"_settingsPassword"]]; 
NSString *instance = [[NSString alloc]initWithString:[defaults objectForKey:@"_settingsInstance"]]; 

的錯誤是這樣的:[NSPlaceholderString initWithString:]:無參數」 這很奇怪,因爲我把Settings.bundle - > Root.plist爲默認值上面的所有領域。

+0

@Stephen達林頓是正確的。但現在粘貼代碼當你通過或NSUserDefults.I希望設定值比我可以幫你 – Harish

回答

0

我認爲問題是如果用戶還沒有進入您的應用程序的設置,那麼從NSUserDefaults返回的那些鍵的所有值都是零。您需要處理該案件並採取相應行動 - 可能需要進入Settings.bundle並選取您已放入的默認值。我只想寫一個獲取密鑰值的方法,如果NSUserDefaults返回nil它會爲您處理設置包的所有查詢。

1

奇怪的是,它應該如何工作 - 這也讓我最初感到困惑。

我想要記住的是,您可以使用NSUserDefaults沒有 Settings.bundle,所以它不能是設置默認值的唯一方法。

Apple提供示例代碼AppPrefs,它顯示如何將設置中的默認值複製到NSUserDefaults

+0

似乎是一個不錯的解決方案..但...之後我複製/粘貼/更改它,在點擊「運行」後,應用程序將無法完成啓動。沒有錯誤,沒有崩潰。只是仍然加載的東西,我不知道... – Lolloz89

+0

我認爲蘋果的示例代碼是一個巨大的循環。一旦我設置新的UserDefaults與setupByPreference(),一個通知被髮送到應用程序委託調用setupByPreference()其中設置Userdefaults等...謝謝蘋果! – Lolloz89

+0

我想你錯了。 'if(testValue == nil)'這行是有原因的。 –

1

你爲什麼不使用它?

NSUserDefaults *defaults = [NSUserDefaults standarduserDefaults]; 
NSString *user = [defaults objectForKey:@"_settingsUsername"]; 
NSString *password = [defaults objectForKey:@"_settingsPassword"]; 
NSString *instance = [defaults objectForKey:@"_settingsInstance"]; 

並確保有這些鍵的對象。

希望它有助於

+0

我試過..它不工作,[默認objectForKey:@「anyKey」]返回nil。 – Lolloz89

+0

代碼如果與問題中發佈的代碼效果相同 - 當然更好,但它不能解決問題。 –

+0

你確定你在NSUserDefaults中存儲了一些東西嗎?就像[[NSUserDefaults standardUserDefaults] setObject:anyObject forKey:@「anyKey」]其中anyObject是anyObject,anyKey是_settingsUsername或_settingsPassword,或者稍後您將使用的任何內容。 – Novarg