Objective-C: чтение из файла JSON слишком медленное для удаленных уведомлений
Я пытаюсь настроить новые push-уведомления ios 10, которые являются изменяемыми, и в методе didReceiveRequest я пытаюсь прочитать некоторые аргументы, один из которых хранится в NSUserDefaults, а другой - в локальном файле JSON, например:
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger index = [defaults integerForKey:@"index"];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Words" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSString *word = dict[@"Irish"][index];
self.bestAttemptContent.body = [NSString stringWithFormat:@"%@", word];
self.contentHandler(self.bestAttemptContent);
}
Проблема в том, что метод работает слишком медленно и не заканчивается. Я знаю, что это так, потому что яблоко предупреждает об этом, и потому что, если я заменю весь этот метод выше простой строкой, которая меняет заголовок на случайную строку, то он работает нормально. Кто-нибудь знает, как сделать это быстрее или обойти это?
Я пытаюсь добиться того, чтобы каждый день переменная index увеличивалась при получении ежедневного push-уведомления, и она должна считывать этот индекс из файла json. Поэтому я хочу, чтобы пользователь ежедневно получал следующую строку в файле JSON
Спасибо
1 ответ
Почему бы вам не выполнить фактическую обработку в новом потоке и вернуться для завершения вызова метода:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
self.contentHandler = contentHandler;
...
});