3 запроса на объект с AFIncrementalStore с использованием NSFetchedResultsController

У меня все настроено с AFIncrementalStore, чтобы использовать Parse как бэкэнд-сервис. Использование такого сервиса делает важным подсчет API-запросов, как если бы я превысил 1 ММ запросов / месяц (хотя метрика была успешной!), Что может привести к некоторым приличным счетам. Обычно это не проблема, но что я вижу, если поставить точку останова в следующем методе в AFHTTPClient:

- (void)enqueueHTTPRequestOperation:(AFHTTPRequestOperation *)operation;

Я обнаружил, что запросы на конкретный объект происходят 3 раза, когда он мне нужен только один раз.

$1 = 0x0b9afe30 https://api.parse.com/1/classes/Poem/cUpTflj0j8
// ...
$8 = 0x099e0a30 https://api.parse.com/1/classes/Poem/cUpTflj0j8
...
$18 = 0x0bb6d530 https://api.parse.com/1/classes/Poem/cUpTflj0j8

Обратите внимание, что разные адреса памяти берутся из AFHTTPRequestOperationЯ печатаю request.URL свойство исследовать objectId (случайная строка в конце URL) из каждого запроса.

Теперь я не достаточно знаком с работой NSIncrementalStore или же AFIncrementalStore чтобы выяснить это после двух дней отладки и экспертизы. Я хотел бы услышать любые мысли о том, что может быть причиной этого, преднамеренным или нет.

Я мог бы добавить, что я использую NSFetchedResultsController с UITableView, Я проследил трассировку стека первого запроса объекта к источнику данных моего табличного представления. Другие 2 запроса прослеживаются до внутренних методов AFIncrementalStore,

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // ...
    NSManagedObject *poem = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = [poem valueForKey:@"title"];  // traced back to here
    // ...
}

1 ответ

Опция может быть настройка NSURLCache вот так:

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:8 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];

[NSURLCache setSharedURLCache:URLCache];

Это должно создать URLCache используя 8 МБ ОЗУ и 20 МБ дискового кэша.

Чтобы проверить, не происходит ли еще столько запросов на провод, возможно, используйте такой инструмент, как wireshark или cocoapacketanalyser.