NSPredicate не выполняется

Это довольно забавно. В моем приложении я создаю тысячи записей в базе данных (в другом потоке я использую MagicalRecord). Кажется, все работает нормально (с точки зрения фона/переднего плана/контекста).

Когда в основном потоке я пытаюсь получить «только что вставленные» данные, я обнаружил следующее поведение:

- (NSArray *) familiesInCompany:(Company *) company {
  NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"company == %@", company];
  NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"company.name == %@", company.name];

  NSArray *first = [Family MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate1];
  NSArray *second = [Family MR_findAllSortedBy:@"name" ascending:YES withPredicate:predicate2];
  NSArray *third = [Family MR_findByAttribute:@"company" withValue:company andOrderBy:@"name" ascending:YES];

  return second;
}

Теперь я получаю следующее:

  • во-первых: это пустой массив
  • во-вторых: содержит все объекты Family, как и ожидалось
  • в-третьих: это пустой массив.

Путем отладки оператора SQL я получаю следующее:

«Первый» оператор:

CoreData: аннотация: общее время выполнения выборки: 0,0000 с для 0 строк.

«Второй» оператор:

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZNAME, t0.ZCOMPANY FROM ZFAMILY t0 ПРИСОЕДИНЯЙТЕСЬ к ZCOMPANY t1 ON t0.ZCOMPANY = t1.Z_PK ГДЕ t1.ZNAME = ?ЗАКАЗАТЬ ПО t0.ZNAME

CoreData: аннотация: время выборки соединения sql: 0,0005 с

CoreData: аннотация: общее время выполнения выборки: 0,0007 с для 2 строк.

«Третий» оператор:

CoreData: аннотация: общее время выполнения выборки: 0,0000 с для 0 строк.

Забавно то, что я закрываю приложение (я имею в виду, что на самом деле завершаю его вручную) и снова открываю его, все три оператора "выборки" работают.

Почему кажется, что первый и третий операторы выборки никогда не выполняются? Как разобраться в проблеме?

8
задан Fabiano Francesconi 26 June 2012 в 17:21
поделиться