0

正規表現関数を CoreData フェッチで動作させようとして、壁に頭をぶつけています。フィルタリングしようとしてmapsいるサブクラスで名前が付けられた属性があります。NSManagedObjectこのmaps属性は、次のような ID 値のリストを持つ文字列です。

1,10,12,8

私の述語がどのように構築されているかは次のとおりです。

NSString *format = [NSString stringWithFormat: @"(maps matches '.*\\b%@\\b.*')", _map.mapID];
NSPredicate *predicate = [NSPredicate predicateWithFormat:format];
[request setPredicate:predicate];

NSManagedObjectContext *moc = [[RKManagedObjectStore defaultObjectStore] primaryManagedObjectContext];
_resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                         managedObjectContext:moc
                                                           sectionNameKeyPath:@"name.stringGroupByFirstInitial"
                                                                    cacheName:nil];

このRubularの例を使用してRegExを構築しました: http://rubular.com/r/zELaz19x0T

値は文字列としてのmapID整数です。

文字列全体に対する述語のマッチングに関するSOの他の質問を読みましたが、パターン.*の最初と最後に を使用して、このパターンで処理する必要があるように感じます。

このコードの結果は、常にゼロの結果を返します。述語が使用されていない場合、すべてのオブジェクトが期待どおりに返されます。ここで何が問題なのか誰にもわかりますか?ありがとう!

4

1 に答える 1

0

これは、次のコードで解決されます。

NSString *format = @"(maps MATCHES %@) OR (maps == '')";
NSString *pattern = [NSString stringWithFormat:@".*(\\b%@\\b).*", _map.mapID];
NSPredicate *predicate = [NSPredicate predicateWithFormat:format, pattern];

述語のフォーマットは文字列のフォーマットと同じであると想定していましたが、そうではありません。私はこの他の答えに啓発されました: https://stackoverflow.com/a/12672462/189292

于 2013-06-18T23:21:36.400 に答える