2012-07-19 47 views
0

我希望這個問題不是太籠統/曖昧......不確定

我正在寫一個iPhone問答遊戲應用時遇到麻煩找出最好的方式來處理數據。目前我正在考慮讓一個Model類擁有一組「User」類,每個類都有一組用戶特定的「Question」類。我希望能夠從我的任何視圖控制器訪問總體模型,但這意味着我可能必須將模型對象傳遞給任何新的視圖控制器,使用單例或執行其他操作。從其他類訪問我的Model對象的最佳方式是什麼?我不確定的另一個因素是能夠保存數據 - 我是否必須使用Core Data/SQLite來保存單個模型對象,還是有更簡單的方法?

回答

2

我通過設計使用CoreData一個模式啓動。國際海事組織,它最好開始使用CoreData,因爲那樣你不需要將你的數據層轉換成CoreData,只要你的應用擴展到一個或兩個簡單的對象之外。

另一條路線是創建一個返回數據的Web服務......所以你只需調用服務並返回一組用戶對象。您可以發送包含問題的整個對象圖,也可以創建另一個服務來爲特定用戶返回一組問題。如果你有一個方便的網絡服務器,這種方法可以最大限度地擴展,因爲你不必依靠應用程序更新來向你的系統提出新的問題。我仍然會使用CoreData來緩存結果......這樣你就不會一直下​​載相同的信息。

因此,當涉及到訪問CoreData對象時,我使用了一個單例的存儲庫類。這使得任何視圖控制器都可以輕鬆獲取存儲庫的實例並獲取一些數據。這是什麼樣的事情可能看起來像;

[[Repository defaultRepository] findFirst:[User class] 
              where:@"name == 'John'"] 

有大量的冗餘代碼來獲取數據,從而包裹,最多一個對象將有助於讓所有的討厭的代碼,如謂詞和排序,您的視圖控制器。你可以在where子句中看到我使用va_list的位置,這樣我就可以直接將該字符串注入到謂詞中。這裏有一些其他的方法,你可以實現:

- (NSArray *) findAll:(Class)entity 
      sortByKey:(NSString *)key 
      ascending:(BOOL)ascending; 

- (NSArray *) findAll:(Class)entity 
      sortByKey:(NSString *)key 
      ascending:(BOOL)ascending 
       where:(NSString *)format, ...; 

- (id) findFirst:(Class)entity 
      where:(NSString *)format, ...; 

我不知道這是首選的方法,但我已經有很多用這種方法的成功。希望這可以幫助!

+0

這似乎是處理數據的一種非常可行的方式。謝謝! – 2012-07-19 16:41:00

+0

需要一點時間才能讓repo類被淘汰,但是一旦你這樣做了,你可以將它放在任何應用程序中並且它可以工作。你再也不會再考慮用CoreData再次訪問數據:) – jerrylroberts 2012-07-19 16:44:49

2

檢查這個環節,這將幫助你很多

鏈接:http://mobile.tutsplus.com/tutorials/iphone/iphone-sdk_store-data/

此蓋4點主要的方式來在iPhone的數據存儲與示例代碼。

1)NSUserDeafult

2)屬性列表

3)SQLLite

4)核心數據

+0

這有助於保存數據,但我的方法是否可行,以管理應用程序中的數據?是否可以只創建一個Model對象的單個實例,然後在我的其他類中使用它? – 2012-07-19 16:34:02