Это довольно забавно. В моем приложении я создаю тысячи записей в базе данных (в другом потоке я использую 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 строк.
Забавно то, что я закрываю приложение (я имею в виду, что на самом деле завершаю его вручную) и снова открываю его, все три оператора "выборки" работают.
Почему кажется, что первый и третий операторы выборки никогда не выполняются? Как разобраться в проблеме?