xCode / iOS - нужна помощь, чтобы основной предикат поиска данных работал - PullRequest
0 голосов
/ 06 февраля 2012

Я так долго работал над этой проблемой, я пропустил весь футбольный сезон и не видел, чтобы мои любимые краснокожие снова проиграли почти все свои игры.Даже мой любимый Арсенал не справляется без моей поддержки, поэтому, пожалуйста, помогите:

Я перебираю ряд основных объектов данных.Я пытаюсь найти объекты, в которых основная и дочерняя сущности содержат поисковый запрос.Если они это сделают, я хочу добавить их в массив результатов.

Существуют сотни строк ненужного кода, которые теперь тратятся впустую и никогда не будут использоваться, потому что различные потоки, за которыми я следовал, и ложные выводы были взяты ..

Код на данный момент таков:

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

Я не знаю, нужно ли мне использоватьпредикат, является ли предикат правильным.Я не думаю, что я проверяю условие правильно.

Так что любая помощь будет принята с благодарностью ..

РЕДАКТИРОВАТЬ - Добавление немного модели отношений ....

enter image description here

1 Ответ

1 голос
/ 07 февраля 2012

Это должно работать:

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);
      }
   }
}
...