11

コア データ データベースがあり、ブロック述語を使用してフェッチ リクエストを作成しようとしていますが、不明な述語エラーが発生します。

注: employeeToHouse は、NSManagedObject をサブクラス化したときに作成された House タイプのプロパティです。

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)'

私は何か間違ったことをしていますか?

4

1 に答える 1

15

私の知る限り、CoreDataでブロック述語を使用することはできません。

ここで最も投票された回答を参照してください: NSFetchRequest および predicateWithBlock

その理由は、CoreData がブロックに含まれる C コードを SQL クエリに変換できないためです。

于 2013-01-12T07:37:38.023 に答える