xCode/iOS - コアデータ検索述語を作成するのに必要な作業

私は長い間この問題に取り組んできました。私はサッカーのシーズンを逃してしまいました。私の最愛のレッドスキンズがほとんどのゲームをもう一度失うのを見ていませんでした。私の最愛のアーセナルでさえ私の支持なしでうまくやっていないので、助けてください:

私は、一連のコアデータオブジェクトを反復処理しています。私はメインとサブエンティティが検索語を含むオブジェクトを見つけようとしています。それらがあれば、結果配列に追加したいと思います。

何百行もの迷惑メールコードが無駄になり、私が従った別のスレッドと偽のリードが取られてしまうので、決して使用されません。

これまでのコードはこれです:

NSLog(@"%s", __FUNCTION__);

NSMutableArray *tempArray = [NSMutableArray array];

for (NSManagedObject *object in tableViewModel.items) {
    //myPredicate = [NSPredicate predicateWithFormat:@"(people.name contains[cd] %@)", searchText];
    //another one for the junk heap

    NSLog(@"searchText: %@", searchText); //this is ok
    NSLog(@"\n\nobject is: %@\n\n", object); //this is ok

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(people.name contains[cd] %@)", searchText];

    BOOL ok = [predicate evaluateWithObject:object];//this is not ok
    if (ok) {
        NSLog (@"result is TRUE");
        [tempArray addObject:object];
        NSLog(@"\n\ntempArray: %@\n\n", tempArray);
    } else {
        NSLog (@"result is FALSE");
    }
}

NSLog(@"out of records");
autoSearchResults = tempArray;
NSLog(@"\n\nautoSearchResults: %@\n\n", autoSearchResults);

return autoSearchResults;//return my own search array

私が出力として得るものは以下の通りです:

object is:  (entity: MainEntity; id: 0x79c50880  ; data: {
    audioName = 00010206120609;
    audioNo = 0;
    date = "2012-02-06 11:10:00 +0000";
    Main = "Main-0001 12.02.06";
    interpret = nil;
    keyword = "";
    order = 0;
    people = "";
    place = "";
    recurring = 0;
    summary = Test1;
    symbol = "";
    type = "";
})

2012-02-06 10:00:11.454 Appkeeper[42598:16c03] result is FALSE

述語が正しいかどうかは、述語を使用する必要があるかどうかわかりません。私は条件を正しくテストしているとは思わない。

だから、どんな助けも大いに評価されるでしょう。

編集 - 関係モデルのビットを追加する....

enter image description here

0

1 答え

これはうまくいくはずです:

for (NSManagedObject *object in tableViewModel.items) {
   for (NSManagedObject *person in object.people) {
      if (person.name && 
          [person.name rangeOfString:searchTerm 
                             options:NSCaseInsensitiveSearch]) {
         NSLog(@"%@ contains %@.", person.name, searchTerm);
      }
      else {
         NSLog(@"%@ does not contain %@.", person.name, searchTerm);
      }
   }
}
1
追加された
ありがとうMundi ..いいえ喜び..私は解決するために "object.people"を得ることができません: "NSManagedObject型のオブジェクトで見つかりませんプロパティの人々.."しかし、私は文字列の値(str1)を取得することができます"str1にはsearchTermが含まれている"のような、私が使うことのできる何らかの比較があります。
追加された 著者 David DelMonte,
私は元の質問に関係テーブルを追加します...本当に助けてくれてありがとう..
追加された 著者 David DelMonte,
いくつかの進歩:)...私は今彼らが1つの名前を持っているだけでオブジェクトを見つけることができます。 2つ以上ある場合、検索はそれらを見つけることができません。何か案は?再度、感謝します!
追加された 著者 David DelMonte,
すばらしいです。エラーメッセージが何が間違っているのかを正確に説明します。データモデルが正しく設定されていません。 xcdatamodeldをチェックして、主エンティティとプロパティ name の値をチェックする他のエンティティとの間に people という多対多の関係があることを確認します。 。
追加された 著者 Mundi,
OK。 NSManagedObjectをエンティティがどのようなクラスにでもキャストする必要があります。例えば。 object を適切にキャストしていると仮定して、2番目のforループ: for(PeopleEntity * person in object.people)
追加された 著者 Mundi,
name はPeopleEntityのプロパティだと思っていました。確かに1つしかありません。
追加された 著者 Mundi,