2012-10-30 202 views
1

我是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; 

但是這太不正常工作

那麼,有沒有一種方法來映射背景或在其他線程的對象?因此,在此期間發送的任何其他請求都應該儘快執行。

+0

您是否需要立即向這些數千用戶展示或進行更改?如果沒有,他們也許可以使用延遲加載,其中您的應用程序只顯示用戶請求該數據時需要顯示的內容。想想蘋果的舊應用商店。它會顯示25個應用程序,然後再按下25個應用程序,然後再請求25個應用程序,它不會連續下載650,000個應用程序。 – Zhang

+0

我正在使用[TITokenField](http://www.cocoacontrols.com/platforms/ios/controls/titokenfield)發送消息。 我只需要顯示所有用戶名作爲自動完成,當用戶在收件人文本字段中鍵入一個字符。 至於延遲加載,當用戶鍵入字符時,它似乎更慢,我可能不得不向web服務發送請求以獲得匹配的名稱。 – Khawar

+0

你也許能夠使用的UITextField委託方法shouldReplaceText:在該方法中,每次用戶鍵入的字符,該方法被觸發。您可以拍攝帶(舊文本字段文本+新字符串)到您的網絡服務相結合,尋找具有類似名稱的用戶異步,然後結果顯示在自定義視圖,顯示結果列表的請求。在用戶點擊一行時,您將該文本從您的自定義視圖傳回給您的委託視圖控制器。這是獨立於任何外部圖書館。 – Zhang

回答

1

只是調用方法loadRequiredData像這樣 [self performSelectorInBackground:@selector(loadRequiredData)withObject:nil];

1

這很明顯,如果您在移動應用程序數據庫中插入數千個條目,則必須花費很多時間。您可以使用此方法在映射開始時顯示活動指示符。

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData;