【发布时间】:2012-05-14 06:29:53
【问题描述】:
我有一个核心数据数据库,我正在尝试使用块谓词创建一个获取请求,但我收到一个未知谓词错误:
注意:employeeToHouse 是一个 House 类型的属性,它是在我继承 NSManagedObject 时为我创建的
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Place"];
request.predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
Place *sortPlace = (Place *)evaluatedObject;
CLLocation *placeLocation = [[CLLocation alloc] initWithLatitude:sortPlace.latitude.doubleValue
longitude:sortPlace.longitude.doubleValue];
CLLocationDistance distance = [placeLocation distanceFromLocation:self.userLocation];
sortPlace.distanceToUser = [NSNumber numberWithDouble:distance];
if(distance<3000)
{
return YES;
}
return NO;
}];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@ "distanceToUser"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
[self.loadingView removeSpinner];
[self setupFetchedResultsControllerWithFetchRequest:request];
然后我得到这个错误:
NSInvalidArgumentException',原因:'未知谓词类型 谓词:BLOCKPREDICATE(0x70ad750)'
我是不是做错了什么?
【问题讨论】:
-
您使用的是“未知谓词类型”吗?
-
嗯,这就是错误消息的内容。
-
@C4- Objective C 代码是这样格式化的吗?太丑了。
-
另外,在一个完全不相关的注释中,
distanceFromLocation有一个错误。如果您颠倒这两个位置(如distance = [self.userLocation distanceFromLocation:placeLocation];),您将获得不同的值,即使无论您走哪条路,距离都应该相同。将两个距离取平均值即可得到正确的值。 -
我想我明白了。我花了一段时间,但似乎(我不完全确定)核心数据不支持 Block 谓词,因为它们无法转换为 SQLite。好吧,看来我需要寻找解决方法。
标签: iphone objective-c core-data predicate nsfetchrequest