我正在循环,在每个循环中我调用一个函数执行以下操作
它在执行fetch
后的第二次或第三次迭代后发生任何解决该问题的建议
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Seriese" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:
@"( SeriesesStudy.StudiesStudent.StudentID == %@ ) AND ( SeriesesStudy.study_uid == %@ ) AND ( Series_uid == %@ )",self.StudentID,self.study_uid,self.Series_uid ]];
if (self.managedObjectContext != nil) {
SeriesList = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; // crash here
seriesobject = [SeriesList objectAtIndex:0];
}
答案 0 :(得分:0)
设置提取的方式没有任何问题,因此崩溃的最可能原因是,在一个循环中,您为其中一个进入谓词的变量传递了错误的值,导致谓词崩溃执行时
BTW,您应该更改谓词中变量的顺序。复合谓词从右到左执行,您希望最简单(因此最快的测试)。现在,您拥有计算密集度最高的测试,最简单的测试。将其更改为:
[NSPredicate predicateWithFormat:@"( Series_uid == %@ ) AND ( SeriesesStudy.study_uid == %@ AND ( SeriesesStudy.StudiesStudent.StudentID == %@ )",self.Series_uid,self.study_uid,self.StudentID]
...它会运行得更快,因为它会找到所有具有匹配Seriese
属性的Series_uid
个对象,然后使用该有限集来执行关系步行测试。谓词测试表明,交叉关系比简单属性测试慢很多倍,所以它们应该总是最后完成。
答案 1 :(得分:0)
问题是我发布了fetchrequest,在评论之后,每件事情都工作正常