iPhone4 iOS5 NSFetchedResultsController как выбрать размер партии? - PullRequest
2 голосов
/ 12 ноября 2011

Теперь у меня есть 5 контроллеров полученных результатов, и я добавляю свой первый, который будет работать с данными, а не просто отображать их. Я ожидаю, что контроллер будет управлять до 150 объектов. Какой размер партии я должен выбрать для последовательной обработки до 5 объектов? Это 5?

  - (NSFetchedResultsController *)estimatorEventsController
    {
        if (__estimatorEventsController != nil)
        {
            return __estimatorEventsController;
        }

        /*
         Set up the fetched results controller.
         */
        // Create the fetch request for the entity.
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        // Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"EstimatorEvent" inManagedObjectContext:self.managedObjectContext];

        [fetchRequest setEntity:entity];

        // Set the batch size to a suitable number.
        [fetchRequest setFetchBatchSize:36];

        // Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"epoch" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

        // Edit the section name key path and cache name if appropriate.
        // nil for section name key path means "no sections".
        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"EstimatorEvents"];
        aFetchedResultsController.delegate = self;
        self.estimatorEventsController = aFetchedResultsController;


        NSError *error = nil;
        if (![self.estimatorEventsController performFetch:&error])
        {

            NSLog(@"Unresolved error __remindersController %@, %@", error, [error userInfo]);
            //      abort();
        }

        return __estimatorEventsController;
    }    

Я ценю вашу помощь!

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Алекс,

В контроллерах полученных результатов у меня более 800 элементов, и выборки не выполняются.Не беспокойтесь о 150 элементах ... вы знаете, преждевременная оптимизация и все такое.

Еще одна вещь, которую нужно помнить, это то, что предел партии находится в запросе выборки, а не в контроллере результатов выборки.Это различие важно, потому что запрос на выборку является элементом более низкого уровня, который может легко вызвать массив результатов, содержащий тысячи элементов.Нужно быть осторожным с запросами таких размеров.150 строк - это не большое дело.

Андрей

1 голос
/ 12 ноября 2011

У меня нет ужасно информированного ответа, но кажется, что большинство руководств предлагают загружать примерно в два-три раза больше ячеек, чем будет отображаться на экране в любой момент времени, так что если у вас есть пять видимых в таблице одновременно, тогда, возможно, 15? Это баланс между преимуществами не загрузки всего сразу, а не наличием слишком большого количества запросов на выборку, поскольку они имеют некоторую нагрузку и задержку, и гарантией того, что у вас уже есть некоторые ячейки, которые еще не были на экране предварительно настроены, чтобы реагировать на внезапные быстрая прокрутка.

...