我是IOS開發和Restkit的新手。 我正在創建一個應用程序,其中數據是從外部web服務以json格式加載的,並且有成千上萬的用戶對象,它們正在映射到coredata中。Restkit對象映射在後臺
我加載這些用戶如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
DBUser* user = [DBUser currentUser];
if ([user isLoggedIn]) {
[self loadRequiredData];
}
}
然後在loadRequiredData
- (void)loadRequiredData {
RKObjectManager *manager = [RKObjectManager sharedManager];
manager.requestQueue.concurrentRequestsLimit = 10;
[manager loadObjectsAtResourcePath:@"/users" delegate:self];
}
它需要近4-5分鐘,以映射CoreData所有用戶對象。 現在的問題是,當Restkit忙於將這些成千上萬的用戶映射到CoreData中時,發送給webservice的任何其他請求都會等待。 當所有用戶都映射到CoreData中時,執行等待請求。
我甚至試圖增加ConcurrentRequestLimit數到10
manager.requestQueue.concurrentRequestsLimit = 10;
但是這太不正常工作
那麼,有沒有一種方法來映射背景或在其他線程的對象?因此,在此期間發送的任何其他請求都應該儘快執行。
您是否需要立即向這些數千用戶展示或進行更改?如果沒有,他們也許可以使用延遲加載,其中您的應用程序只顯示用戶請求該數據時需要顯示的內容。想想蘋果的舊應用商店。它會顯示25個應用程序,然後再按下25個應用程序,然後再請求25個應用程序,它不會連續下載650,000個應用程序。 – Zhang
我正在使用[TITokenField](http://www.cocoacontrols.com/platforms/ios/controls/titokenfield)發送消息。 我只需要顯示所有用戶名作爲自動完成,當用戶在收件人文本字段中鍵入一個字符。 至於延遲加載,當用戶鍵入字符時,它似乎更慢,我可能不得不向web服務發送請求以獲得匹配的名稱。 – Khawar
你也許能夠使用的UITextField委託方法shouldReplaceText:在該方法中,每次用戶鍵入的字符,該方法被觸發。您可以拍攝帶(舊文本字段文本+新字符串)到您的網絡服務相結合,尋找具有類似名稱的用戶異步,然後結果顯示在自定義視圖,顯示結果列表的請求。在用戶點擊一行時,您將該文本從您的自定義視圖傳回給您的委託視圖控制器。這是獨立於任何外部圖書館。 – Zhang