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.