9 iphone crash cocoa-touch core-data objective-c
我在更改NSManagedObject的BOOL属性时遇到崩溃.
保存对象的代码是:
self.detailItem.bookmark = [NSNumber numberWithBool:YES];
NSError *error = nil;
if (! [self.detailItem.managedObjectContext save:&error])
{
// Handle the error.
}
NSLog(@"%@", error);
Run Code Online (Sandbox Code Playgroud)
而错误:
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.'
Run Code Online (Sandbox Code Playgroud)
警告:此答案基于我根据错误消息做出的猜测; 它可能100%错了!
该错误看起来像是错误形成的NSPredicate.你可能有类似的东西
NSString *name = @"Bob";
[NSPredicate predictaeWithFormat:@"ANY %K IN %@", @"name", name];
Run Code Online (Sandbox Code Playgroud)
看起来它可能会找到任何地方,name = 'Bob'但它不会,它会抛出异常:(
如果您使用'IN',则需要传递NSSet或NSArray即.
NSArray *names = [NSArray arrayWithObjects:@"Alice", @"Bob", nil];
[NSPredicate predictaeWithFormat:@"ANY %K IN %@", @"name", names];
Run Code Online (Sandbox Code Playgroud)
这将找到名为'Bob'或'Alice'的任何内容.
如果您只是想搜索"Bob",请执行以下操作:
NSString *name = @"Bob";
[NSPredicate predictaeWithFormat:@"%K == %@", @"name", name];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3195 次 |
| 最近记录: |