iOS访问核心数据实体,同时在后台更新它们

时间:2013-01-07 17:44:19

标签: objective-c ios core-data concurrency magicalrecord

在我的iOS应用程序中,当应用程序加载以检查我的Core Data DB中各种表(实体)的更新时,我正在点击Web服务。

我在后台线程中执行此操作,因此用户仍可以与应用程序进行交互

我遇到的问题是当我尝试加载包含我从Core Data访问的实体表的视图时 - 应用程序变得无响应并且滞后直到后台更新完成。

如果我在后台更新那些“任务”时触摸查看“任务”表,是否可以获得无滞后的体验?

我正在使用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 个答案:

答案 0 :(得分:0)

我最终没有使用MagicalRecord来获取我正在寻找的行为 - 我关注了这篇文章:

https://stackoverflow.com/a/11814957/480415

现在我的UI在后台更新实体时没有被锁定。