2012-02-06 7 views
0

私はこの問題を長年取り組んできましたが、私はサッカーのシーズンを逃してしまいました。私の最愛のアーセナルも私のサポートなしではうまくやっていないので、助けてください。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: <MainEntity: 0x79c51cb0> (entity: MainEntity; id: 0x79c50880 <x-coredata://99B12EAD-002C-402C-99CA-CF5A328E67E5/MainEntity/p2> ; data: { 
    audioName = 00010206120609; 
    audioNo = 0; 
    date = "2012-02-06 11:10:00 +0000"; 
    Main = "Main-0001 12.02.06"; 
    interpret = nil; 
    keyword = "<relationship fault: 0x79c708a0 'keyword'>"; 
    order = 0; 
    people = "<relationship fault: 0x79c708c0 'people'>"; 
    place = "<relationship fault: 0x79c710b0 'place'>"; 
    recurring = 0; 
    summary = Test1; 
    symbol = "<relationship fault: 0x79c71110 'symbol'>"; 
    type = "<relationship fault: 0x79c71170 'type'>"; 
}) 

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

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

ので、任意の助けを大幅に高く評価されます

...

EDIT - 関係モデルのビットを追加....

enter image description here

答えて

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); 
     } 
    } 
} 
+0

感謝をMundi ..いい喜び..解決するために "object.people"を得ることができません: "NSManagedObject型のオブジェクトで見つからないプロパティの人" ..しかし、文字列値(str1)を保持できます。 "str1にはsearchTermが含まれている"のような、私が使うことのできる何らかの比較がありました。 –

+0

素晴らしいエラーメッセージが何が間違っているのかを正確に説明します。データモデルが正しく設定されていません。あなたのxcdatamodeldをチェックして、主体と 'name'プロパティの値をチェックしたい他のエンティティとの間に' people'という多対多関係があることを確認してください。 – Mundi

+0

私は元の質問に関係テーブルを追加します...本当に助けてくれてありがとう。 –

関連する問題