2013-01-07 42 views
1

在我的iOS應用程序中,當應用程序加載以檢查我的核心數據數據庫中各種表(實體)的更新時,我正在打開Web服務。iOS訪問核心數據實體,同時在後臺更新它們

我這樣做在後臺線程,因此用戶仍然可以與應用

我遇到的問題是交互當我嘗試加載包含實體的表,我從核心數據 - 訪問視圖 - 應用程序變得無響應,並滯後到後臺更新完成。

如果我在後臺更改這些「任務」時觸摸查看我的「任務」表,那麼是否有可能產生滯後的體驗?

我使用MagicalRecord並在saveInBackgroundWithBlock塊來執行我的創建/更新

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){  
     //UserTasks 
     if([viewName isEqualToString:[[NSString stringWithFormat:@"UserTask_vw_iSales"] lowercaseString]]) 
     { 
      //returns a UserTask or nil if one does not exist 
      UserTask *oldUserTask = [UserTask doesExist:[record valueForKey:@"JSONData"]]; 

      if(oldUserTask) 
      { 
       NSLog(@"deleting old UserTask"); 

       [UserTask MR_deleteAllMatchingPredicate:[NSPredicate predicateWithFormat:@"userTaskUID == %@", oldUserTask.userTaskUID] inContext:localContext]; 
      } 

      //create new one 
      UserTask *utt = [UserTask MR_createInContext:localContext]; 
      [utt initWithJSONSting:[record valueForKey:@"JSONData"]]; 

      NSLog(@"Creating UserTaskType: %@", utt.userTaskUID); 
     } 
}]; 

感謝您的幫助!

+1

你在哪裏初始化你的'NSManagedObjectContext'?初始化的併發類型是需要考慮的重要因素。 –

+0

@JacobRelkin在我的AppDelegate中,我使用下面這行啓動我的主NSManagedObjectContext:'_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];'然後我使用MagicalRecord函數來訪問它。 – RyanG

+0

是否在等於'+ [NSManagedObjectContext MR_defaultContext]'的塊內向您提供了'NSManagedObjectContext'實例? –

回答