繁体   English   中英

后台核心数据更新

[英]core data update in background

我基本上需要在不阻止UI的情况下在后台线程中更新我的核心数据并将其保存。 保存后应重新加载表View以查看更改。 因此,为此我想到了使用

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // Add code here to do background processing
   NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    self.backgroundManagedObjectContext = context;
    if(self.managedObjectContext == nil)
        self.managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    self.backgroundManagedObjectContext.parentContext = self.managedObjectContext;

    //update data
    [self getDataFromFile];

dispatch_async( dispatch_get_main_queue(), ^{
        // Add code here to update the UI/send notifications based on the
        // results of the background processing
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ReloadAppDelegateTable" object:nil];
        [context release];
    });
});

尝试获取数据时在getDataFromFile中

if(![NSThread isMainThread])
{
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"LogDetails" inManagedObjectContext:self.backgroundManagedObjectContext];
    [request setEntity:entity];
    logs = [self.backgroundManagedObjectContext executeFetchRequest:request error:nil];
}

我收到错误*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'+ entityForName:找不到实体名称'LogDetails'的NSManagedObjectModel

谁能解释我为什么收到此错误

另外我还有一个疑问,是否将其作为后台托管对象上下文或子托管对象上下文与父作为主线程托管对象上下文

一个NSManagedContext仅应在一个线程中使用。 在线程之间传递NSManagedObject可能不安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM