我有一个Journal NSManagedObject子类,它有很多页面。 我已创建此自定义方法(在类别中)以按顺序获取页面数组。 如你所见,这很简单。
//
// @returns an array of pages sorted by indexInJournal
//
- (NSArray*)sortedPages {
NSLog(@"Are we in main thread? %i", [NSThread isMainThread]);
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"indexInJournal"
ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
NSArray *result = [[self.pages allObjects] sortedArrayUsingDescriptors:sortDescriptors];
return result;
}
由于某种原因,该方法有时失败,我在self
对象上得到EXC_BAD_ACCESS;这很奇怪,因为我正在执行它的方法。 NSZombieEnabled没有帮助。
当从其他例程调用时,该方法可以工作,但只返回一个页面(第一个);我相信有3页。
在coredata istantiates / release objects的路上有什么我遗漏的东西吗?
干杯, 的Davide
答案 0 :(得分:0)
您需要确保您与Journal
对象的managedObjectContext位于同一个线程上,或者Journal
对象可能无法在关系中找到Pages
个对象。
交叉线程会导致各种问题。在获得想象之前,验证方法是否在单个线程上工作。
答案 1 :(得分:0)
我发现了问题所在。 基本上,在创建页面时,我将它们添加到日志页面集并释放它们;因此我了解到你没有发布NSManagedObject。 这就是生成EXC_BAD_ACCESS的原因。检测起来有点棘手,因为页面会在必要时自动创建,所以我不知道我是在添加它们。