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;
   ...
});    
Другие вопросы по тегам