2012-06-24 6 views
1

Я пытаюсь выяснить, есть ли у меня правильное понимание предварительной выборки с помощью Core Data. Я выполняю запрос на выборку с параметром batchSize 20 для объекта Message, который имеет отношение один к одному с свойством MBDate. Я упреждающий это свойство:Должен ли предварительный выбор возвращать любые неисправности?

[fetchRequest setRelationshipKeyPathsForPrefetching: 
      [NSArray arrayWithObjects:@"date", nil]]; 

Команда упреждающей проходит через, как показано на этом выходе:

CoreData: annotation: Prefetching with key 'date'. Got 9 rows. 
CoreData: annotation: total fetch execution time: 0.0094s for 20 rows 

Однако в только первую партию, если я

if(message.date.isFault) NSLog(@"isFault");,

он всегда выводит isFault, хотя я его заранее набрал! И если я пытаюсь получить доступ к любому из свойств объекта MBDate, запрос вина пожаров:

CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATE, t0.ZDATESTRING FROM ZMBDATE t0 WHERE t0.Z_PK = ? 
CoreData: annotation: sql connection fetch time: 0.0008s 
CoreData: annotation: total fetch execution time: 0.0014s for 1 rows. 
CoreData: annotation: fault fulfilled from database for : 0x85d22b0 <x-coredata://736D04C4-7DB3-40B7-B208-79B5DFD68260/MBDate/p61> 

Почему упреждающие не проходят? Почему мои объекты все еще неисправны? Я знаю, что трудно дать какие-то определенные ответы, но любые советы или идеи были бы замечательными!

ответ

1

Можете ли вы попробовать это же, не устанавливая размер партии?

Существует любопытное примечание в NSFetchRequest Class Reference под fetchBatchSize:

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

Это как если бы вы установили пакетный пакет, возвращаемые объекты будут повреждены независимо от того, что.

+0

Но, видите ли, это было ошибкой со скоростью, намного меньшей, чем мой размер партии, как и каждые 5 объектов, которые были сбиты с ошибкой, когда мой размер партии составлял 100. В результате я получил отдельную выборку для получения моих дат и размещения их в массиве , который автоматически «предваряет» их для меня, не делая ничего другого – Snowman