我在更改NSManagedObject的BOOL属性时遇到了崩溃。
保存对象的代码是:
self.detailItem.bookmark = [NSNumber numberWithBool:YES];
NSError *error = nil;
if (! [self.detailItem.managedObjectContext save:&error])
{
// Handle the error.
}
NSLog(@"%@", error);
错误:
Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. with userInfo (null)
2011-08-18 15:41:32.866 Codes[5260:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
答案 0 :(得分:7)
警告:此答案基于我根据错误消息做出的猜测;它可能是100%错误!
错误看起来是错误形成的NSPredicate
。你可能有像
NSString *name = @"Bob";
[NSPredicate predictaeWithFormat:@"ANY %K IN %@", @"name", name];
看起来它可能会找到name = 'Bob'
的任何内容,但它不会,它会抛出异常:(
如果您使用'IN',则需要传递NSSet或NSArray,即
NSArray *names = [NSArray arrayWithObjects:@"Alice", @"Bob", nil];
[NSPredicate predictaeWithFormat:@"ANY %K IN %@", @"name", names];
这会找到名为'Bob'或'Alice'的任何内容。
如果您只想搜索“Bob”,请执行以下操作:
NSString *name = @"Bob";
[NSPredicate predictaeWithFormat:@"%K == %@", @"name", name];
答案 1 :(得分:3)
我认为deanWornbourne写了正确的答案,但对我来说并不是很清楚,所以我要重申他的答案和见解,并提供进一步的解释。
ProgramGuy正在收到严重的应用程序错误,因为他的谓词错误。 ANY bookmark == YES
错误的原因是" ANY"仅用于模型中具有一对多关系的位置。如果您有一对一的关系,则应使用bookmark == YES
。
严重的申请错误'听起来有点傻,引起的警报超出必要的程度。但是,它为您提供了错误的相当好的线索。它说观察者中有一个“虫子”。'。这意味着你有一些' NSFetchedResults
'对象或' NSFetchedResultsController
'设置(因为我们正在谈论NSManagedObjectContextObjectChangedNotification
)。此外,错误消息显示left hand side for an ALL or ANY operator must be either an NSArray
...这暗示必须存在一对多的关系。
希望这有帮助。
答案 2 :(得分:0)
只是一个FYI。在我的案例中,deanWombourne的回答是100%正确的。
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyTeamSchedule" inManagedObjectContext:[[MyTeamStore sharedStore] context]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY myteam.teamname == %@", myTeamName];
删除ANY后问题解决了。感谢上帝为院长!刚从故障排除和头痛中拯救了我。