Objective-C:从 JSON 文件读取远程通知太慢
Posted
技术标签:
【中文标题】Objective-C:从 JSON 文件读取远程通知太慢【英文标题】:Objective-C : reading from JSON file too slow for remote notifications 【发布时间】:2017-06-25 00:47:48 【问题描述】:我正在尝试设置可变的新 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);
问题是方法运行太慢并且没有完成。我知道是这种情况,因为苹果会警告它,因为如果我用一个简单的行替换上面的整个方法,将标题更改为随机字符串,那么它运行良好。有谁知道如何使它更快或解决这个问题?
我想要完成的是每天收到每日推送通知时“索引”变量都会增加,它应该从 json 文件中读取该索引。所以我基本上希望用户每天都能收到 JSON 文件中的下一个字符串
谢谢
【问题讨论】:
您的 Words.json 文件有多大?可以使用效率更高的存储,比如 sqlite 吗? 我想过。我找到了一种方法来获取存储在用户默认值中的单词,但现在遇到了一些奇怪的问题,当我将正文文本返回 Null 时......在一些我知道存在的文本上 您收到serviceExtensionTimeWillExpire
了吗? Apple 给了你 30 秒的时间来处理这个请求,而且看起来你的代码运行时间并不长。问题可能出在其他地方。
我同意我认为问题可能不在这里。我找到了一种将我想要的单词存储在 NSUserDefaults 中的方法,但仍然遇到问题(请参阅此处:***.com/questions/44751398/…)
【参考方案1】:
为什么不在一个新线程中进行实际处理,然后返回完成方法调用:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^
self.contentHandler = contentHandler;
...
);
【讨论】:
我会试试这个,谢谢。如果有效,会回帖。 不幸的是没有工作。无论如何,谢谢你的建议!以上是关于Objective-C:从 JSON 文件读取远程通知太慢的主要内容,如果未能解决你的问题,请参考以下文章
从 iOS 应用程序中的远程 HTML/json 项读取 json
Objective-C:如何在 JSON 中读取 JSON?
使用 swift 5 从远程读取 json 内容并在 Xcode 的主界面上打印
在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值