2012-05-18 4 views
0

У меня есть контроллер массива, и я привязал к нему сущность, сортирую дескриптор и предикат. Если я изменяю формат предиката при запуске приложения, он работает, поэтому привязка работает.Обновление предиката на arraycontroller

Моя проблема в том, когда я хочу изменить предикат, f.ex. с поисковым термином или некоторой строкой, которую вводит пользователь, ничего не происходит, но когда я добавляю запись в базовую базу данных данных, табличное представление обновляется.

Итак, мой вопрос: как сообщить контроллеру массива, что предикат изменился, и он должен обновить себя. Вот код, который запускается, когда я вхожу в поисковый запрос, он также работает, и я получаю все выходные данные NSLogs правильно. Просто мой планшет не обновляет себя.

- (IBAction)didChangeSearch:(id)sender { 
    if (sender == searchField) { 
     NSString *searchterm = [sender stringValue]; 
     if (searchterm.length > 1) { 
      predicate = [NSPredicate predicateWithFormat:@"name contains [c]%@", @"m"]; 
      NSLog(@"Putting predicate to the job : %@", searchterm); 

     } else { 
      predicate = nil; 
      NSLog(@"There is nolonger any predicate"); 
     } 
    } 
    NSLog(@"I just got %@", [sender stringValue]); 
} 

Я хотел бы сказать в начале, что я очень новичок в переплетах, никогда не использовали их, пока сегодня, не получили хорошее чувство для них, и это понравилось, экономит мне столько кода и я наконец-то понял он (до 1 дня может).

+0

Итак, предикат связан с привязкой предиката фильтра контроллера массива в IB? – rdelmar

ответ

2

Вы должны использовать self.predicate = ..... Это обеспечит отправку правильных уведомлений KVO, что немедленно сделает ваше обновление таблицы (это предполагает, что «предикат» является свойством и связан с вашим привязка предиката фильтра контроллера массива).

+0

Спасибо. Это работало как прелесть. Конечно, это должно было быть так просто :) –

Смежные вопросы