我通過設計使用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, ...;
我不知道這是首選的方法,但我已經有很多用這種方法的成功。希望這可以幫助!
這似乎是處理數據的一種非常可行的方式。謝謝! – 2012-07-19 16:41:00
需要一點時間才能讓repo類被淘汰,但是一旦你這樣做了,你可以將它放在任何應用程序中並且它可以工作。你再也不會再考慮用CoreData再次訪問數據:) – jerrylroberts 2012-07-19 16:44:49