Core data CoreData-后台线程中的计算属性

Core data CoreData-后台线程中的计算属性,core-data,Core Data,我从CoreData中获取了大约2500颗恒星,用于构建星图,出于明显的原因,我想在背景线程中计算坐标等的大部分数学运算。我的问题是,既然我必须将CoreData对象作为NSManagedObjects传递回主线程,那么您将如何计算(比如)背景线程中的一组笛卡尔坐标,以及(最好)在NSManagedObject子类中设置这些坐标 值得一提的是,下面是我用来从CoreData获取并传递到主线程的代码片段: // Context and Model NSManagedObjectContext *c

我从
CoreData
中获取了大约2500颗恒星,用于构建星图,出于明显的原因,我想在背景线程中计算坐标等的大部分数学运算。我的问题是,既然我必须将
CoreData
对象作为
NSManagedObject
s传递回主线程,那么您将如何计算(比如)背景线程中的一组笛卡尔坐标,以及(最好)在
NSManagedObject
子类中设置这些坐标

值得一提的是,下面是我用来从CoreData获取并传递到主线程的代码片段:

// Context and Model
NSManagedObjectContext *context = [self.dataProvider newManagedObjectContext];
NSManagedObjectModel *model = [self.dataProvider sharedManagedObjectModel];

// Fetch the stars
NSArray *stars = [SkyObject getSkyObjectsBetweenMinCoords:minCoords 
                                                maxCoords:maxCoords 
                                                   minMag:self.minimumMagnitude 
                                                   maxMag:self.maximumMagnitude 
                                                    model:model 
                                                  context:context];

NSMutableArray *starIDs = [[NSMutableArray alloc] init];

// Add the star's objectID to the set
for (SkyObject *star in stars) {
    [starIDs addObject:star.objectID];
}

// Pass objects across thread boundaries
[self performSelectorOnMainThread:@selector(updateLocalContextWithObjectIDs:) withObject:starIDs waitUntilDone:YES];

// Release retained memory
[starIDs release];
[context release];

我可以从你的问题和代码中看出这是我无法理解的。但是GCD呢。这就是我通过tcp/ip发送的重复保持活动所使用的。无论如何,我希望这能有所帮助

通常情况下,您不会“将CoreData对象作为NSManagedObjects传递回主线程”,而是执行所有操作,通过后台线程上运行的上下文设置托管对象,然后在完成后,将前台上下文与后台上下文合并


传递ManagedObjects当然有效,但这是一种缓慢的方式,尤其是当您有数千个对象要处理时。它也不像合并那样更新整个对象图

您可以将前台上下文与后台上下文合并
-您能给我举个例子吗?请参阅《核心数据编程指南:使用通知跟踪其他线程中的更改》在同一篇文章中所说的与您的回答相反
要跨线程边界从一个上下文“传递”一个托管对象,您可以:传递其对象ID(objectID)并在接收托管对象上下文上使用objectWithID:或existingObjectWithID:错误:。
等。。。