【发布时间】:2011-08-29 20:15:44
【问题描述】:
我正在从CoreData 获取大约 2500 颗星以用于构建星图,并且出于显而易见的原因,我希望在后台线程中进行大部分数学计算以计算坐标等。我的问题是,因为我必须将CoreData 对象作为NSManagedObjectIDs 传递回主线程,所以你将如何计算后台线程中的一组笛卡尔坐标并(最好)将这些坐标设置在NSManagedObject 子类?
对于它的价值,这是我用来从 CoreData 获取并传递给主线程的代码的 sn-p:
// 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];
【问题讨论】:
标签: core-data