2011-07-08 51 views
27

我知道NSUserDefaults保存/恢復用戶偏好。 應用程序的等效等級是多少?例如,應用程序可能有一個「上次運行」字段;或者它可能有一個用於在應用程序級別使用的設備的唯一標識的字段。在iOS上保存(私人)應用程序設置?

我的意圖是將應用程序的設置(不是用戶設置)保存在設置應用程序中,而不是在iTunes,Time Machine,{whatever}中備份這些設置。

我對Java和C#收到了很多噪音,但對於iOS/iPhone/iPad來說並不多。

+0

iPhone是一個用戶操作系統。您無法使用其他用戶名登錄。那麼爲什麼你需要應用程序設置,與用戶設置不同呢?或者我錯過了什麼? – bartvdpoel

回答

11

如果您可以通過NSUserDefaults存儲值,那麼也可以存儲應用程序首選項。

或您的項目添加settings.plist和閱讀(什麼你是不是後續變化)

,你可以使用像,

+ (NSDictionary*)getBundlePlist:(NSString *)plistName 
{ 
    NSString *errorDesc = nil; 
    NSPropertyListFormat format; 
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; 
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; 
    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization 
              propertyListFromData:plistXML 
              mutabilityOption:NSPropertyListMutableContainersAndLeaves   
              format:&format errorDescription:&errorDesc]; 
    return temp; 
} 

+ (id) getPropValue:(NSString *)PropertyName 
{ // I am supposing you had add your app preferences on settings.plist. 
    return [[Property getBundlePlist:@"settings"] objectForKey:PropertyName]; 
    //here Property is my class name, then you can use value by 
    //NSString *value = [Property getPropValue:@"setting1"]; 
} 
+0

或者您可以將所有內容放入數組或字典中,並調用'writeToFile:' – Greg

+0

,這很好,因爲我瞭解您的解決方案,它將在應用程序執行後保存。嗯,我告訴他在IDE中添加plist文件的值。 –

0

很難告訴你在問什麼。聽起來像NSUserDefaults就是你要找的東西,但是你聲稱你已經意識到了這一點。那麼你的問題是什麼?

+0

在設備上,某些項目(例如'上次運行')不應顯示在設置應用程序中,並且不應備份。我的意圖是保持私密。 – jww

+7

@noloader當你把東西放在NSUserDefaults中時,它會在設置中自動顯示** NOT **。要在設置中顯示某些內容,您必須專門爲您的應用添加一個設置包,並特別添加一個可設置該值的密鑰。什麼都不會自動出現。我始終使用'NSUserDefaults',我的應用甚至沒有設置捆綁包,也沒有在設置中顯示。 – Greg

70

NSUserDefaults可用於您要求的內容。

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"shownPrompt"]) { 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"shownPrompt"]; 
    // Show your prompt or whatever 
} 

這是一個工作代碼片段。如果密鑰爲假,則將其設置爲true並顯示提示。該代碼下次運行時,密鑰已經爲true,因此不會顯示提示。

NSUserDefaults是特定於當前設備上的當前應用程序,類似於在一個NSMutableDictionary這是一個關鍵的價值體系,與替代實例你自己,還有你的整個應用程序的通用共享實例的區別,當應用程序退出時不會被擦除。

NSUserDefaults是完美的保存之類的東西是否已經顯示出,上次運行等日期在這裏閱讀文檔:https://developer.apple.com/documentation/foundation/userdefaults

不要被「用戶偏好」的一部分被推遲。你可以用它來保存任何你想要的(只要它是或可轉換爲NSObject它實現<NSCoding>,這基本上意味着NSStringNSDictionaryNSArrayNSNumberUITextFieldintfloatbool等)。

只是爲了澄清,你放在NSUserDefaults的東西將而不是,在任何情況下,自動調整在設置應用程序。它將保持完全私密和隱藏。要在「設置」中顯示某些內容,您需要嚮應用添加「設置」捆綁包,然後爲您希望在「設置」應用中顯示的每個值手動添加密鑰。

+2

NightLeopard - 我希望能給你信用的答案也,但我不能。我能做的最好的是一個SO豎起大拇指。 – jww

+1

確保您在某個時刻調用'[standardUserDefaults synchronize]'來提交更改。 – bendytree

+1

@bendytree根據Apple的文檔:因爲此方法是定期自動調用的,所以只有當您不能等待自動同步(例如,如果您的應用程序即將退出)或者您想更新用戶即使您未做任何更改,也會默認使用磁盤上的內容。 – Tom