我从CoreData
中获取大约2500颗星以用于构建星图,并且想要在后台线程中计算坐标等的大部分数学运算,原因很明显。我的问题是,因为我必须将CoreData
对象作为NSManagedObjectID
s传递回主线程,您将如何处理计算,例如后台线程中的一组笛卡尔坐标,并且(最好)在NSManagedObject
子类中设置这些坐标?CoreData - 后台线程中的计算属性
对于它的价值,这里是我使用的是从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];
谢谢,我已经在使用'NSOperationQueue'工作。 –