2011-03-29 83 views
2

我想在應用程序中的不同位置存儲數據,可通過應用程序訪問對象。類似於php中的會話或全局變量。我知道我可以使用NSUserDefaults,但我不知道如何繼續向它添加值然後訪問它。例如,首先我想存儲登錄時使用的用戶名,然後在第三屏上,我想保存他從公司列表中選擇的那個用戶的公司。然後在第5個屏幕上,我想保存用戶選擇的位置。然後我有不同的功能,用戶可以根據他的選擇使用不同的功能。由於我是一個新手,我很抱歉,如果這是一個愚蠢的問題,但任何人都可以幫助我,我將如何存儲和檢索整個應用程序可訪問的多個數據。在iPhone中保存會話數據

回答

2

您在評論中詢問我是否在屬性列表中提供了代碼段。當然。沒問題。首先你需要做的是創建你的財產清單文件。只需將一個屬性列表類型的文件添加到您的項目中。我們稱之爲DataPoints.plist。就本例而言,該文件將包含NSString類型的鍵值條目。在代碼示例中,我只是提取屬性列表條目並加載數組。現在你可以對數組做任何你想做的事情。用它來加載一個表格視圖或其他。希望這可以幫助。如果確實如此,請將其標記爲已接受的答案。謝謝!

NSString *errorDesc; 
NSPropertyListFormat format; 
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"DataPoints" ofType:@"plist"]; 

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; 

NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization 
            propertyListFromData:plistXML 
          mutabilityOption:NSPropertyListMutableContainersAndLeaves 
          format:&format 
          errorDescription:&errorDesc]; 

if (!temp) { 
    // Handle Error 
    Log(@"Error reading plist: %@, format: %d", errorDesc, format); 
} 

NSArray *dataPoints = [NSArray arrayWithArray:[temp objectForKey:@"DataPoints"]]; 
0

創建一個單例對象。我知道這不是一個很好的模式,但它是解決您的問題的最簡單的解決方案。

5

在iOS設備上,您有多種存儲數據的選項。這裏有幾個你可能會考慮的:

  1. 核心數據和SQL數據存儲庫或XML存儲庫。這基本上是蘋果的設備數據庫框架庫,可供所有應用程序使用。這不是最簡單的選項,但它可以讓您存儲相當大量的各種數據,這些數據將在整個應用代碼中提供。此外,只要應用程序關閉前將其保存到持久性數據存儲中,數據就會在應用程序啓動之間保留。

  2. 屬性列表。屬性列表比Core Data更輕量級,您可能會發現它們更易於使用。它們允許將基本鍵值對存儲和檢索到持久性屬性列表文件中。因此,只要您在應用程序關閉之前將數據存儲到屬性列表文件中,您還可以在應用程序啓動之間獲得數據保留的優勢。

  3. 將數據存儲到文本文件。我不確定這是否比財產清單有任何優勢。

  4. 用戶默認值。我不確定您在應用使用過程中如此輕鬆地添加新類型的數據。這更多地用於提供一組默認應用程序設置,然後允許用戶在應用程序使用過程中對其進行個性化設置。

  5. 內存中的單例對象。這可能是一種選擇,但是,當然,一旦應用程序關閉,所有數據都會消失,除非它以某種方式永久存儲到永久性數據存儲中。

我敢肯定有除了這些其他的選擇。我會有興趣閱讀它們。我希望這有幫助。

+0

非常感謝您的回覆。我想我應該從上面的評論中使用財產清單。此外,當應用啓動時,我不需要獲取數據,因爲這是動態的,並且是用戶在啓動應用時選擇的內容。所以每次都會有所不同。你也可以告訴我如何創建一個屬性列表文件,以及我將如何保存並從中檢索數據。 – developer 2011-03-30 14:15:10

+0

我在屬性列表中提供了一個代碼示例。雖然,我可能會補充一點,這聽起來好像你不需要在應用程序啓動之間保存數據。在這種情況下,如果數據不足以消耗大量內存,則可以考慮使用內存中的單例對象,如Joris所建議的。如果是大量數據,那麼爲了釋放一些內存,您可能希望使用將數據轉儲到持久性存儲的東西,例如屬性列表或核心數據。 – 2011-04-01 16:53:59