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);
}
}];
感謝您的幫助!
你在哪裏初始化你的'NSManagedObjectContext'?初始化的併發類型是需要考慮的重要因素。 –
@JacobRelkin在我的AppDelegate中,我使用下面這行啓動我的主NSManagedObjectContext:'_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];'然後我使用MagicalRecord函數來訪問它。 – RyanG
是否在等於'+ [NSManagedObjectContext MR_defaultContext]'的塊內向您提供了'NSManagedObjectContext'實例? –