2016-04-05 11 views
0

NSArrayにはJSONという文字列が含まれています。JSON stings配列をNSPredicateと正規表現でフィルタリングします

[ 
    { 
     "title":"find good book", 
     "isCompleted":true 
    }, 
    { 
     "title":"complete work", 
     "isCompleted":false 
    }, 
    { 
     "title":"check schedule", 
     "isCompleted":false 
    } 
] 

「タイトル」キーの下に「plet」値を持つオブジェクトのインデックスを検索したいと考えています。 NSPredicateを単に使用すると、すべてのオブジェクトが返されます。なぜなら、 "isCompleted"を持つすべてのオブジェクトがキーとして突き刺さるからです。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", @"plet"]; 

私はJSONNSDictionaryにオブジェクトを変換する必要はありません。 [NSPredicate predicateWithBlock:]を使用しないのは、この述語をNSFetchedResultsControllerに適用するためです。ドキュメントによると、[NSPredicate predicateWithBlock:]によって作成されたNSPredicateは、NSFetchedResultsControllerには使用できません。

私の質問は、この問題を解決するために正規表現を使用できますか?私は正規表現についてあまり知らない。誰かがこれの例を挙げることができますか?

+0

なぜそれらを適切なオブジェクトに変換してからオブジェクトをCoreDataに保存しないと、その後でプロパティ付きの述語を直接使用できますか? – ogres

答えて

0

述語の作成には、predicateWithBlockメソッドを使用できます。ブロック内で、dynamicValeに検索する値が含まれているかどうかを確認します。

コード:JhonyKuttiesの答えからコピー

NSArray *yourArray = ....; 
NSString *searchText = ...; 

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary * _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) { 
    NSArray *dynamicVales = [evaluatedObject valueForKeyPath: @"dynamicVales.value"]; 
    return [dynamicVales containsObject:searchText]; 

}]; 

NSArray *filteredArray = [yourArray filteredArrayUsingPredicate:predicate]; 

。コーディングをお楽しみください:)

関連する問題