今天,当widgetPerformUpdateWithCompletionHandler包含异步主体时,iOS 8的扩展问题

时间:2014-09-11 13:05:10

标签: ios objective-c ios8 ios-app-extension

我正在iOS 8上使用新的Today Extension。在设备上进行调试似乎非常困难,结果不一致,所以我大部分时间都在使用模拟器。

我正在构建的扩展是一个非常简单的扩展,每天只显示不同的图像,流程实际上非常简单:

  • iOS调用widgetPerformUpdateWithCompletionHandler
  • 我以异步方式下载图片
  • 如果图像已成功下载,我在故事板上设置了相应的插座,并使用常量调用完成块:NCUpdateResultNewData
  • 如果发生错误,我使用常量:NCUpdateResultFailed
  • 调用完成块

根据Apple的参考文档,每次我们使用常量NCUpdateResultNewData调用完成块时,窗口小部件的快照应该更新到当前视图,但是,这不会一直有效,有时iOS似乎使用较旧的快照

代码很简单,这里是widgetPerformUpdateWithCompletionHandler代码:

-(void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
__weak TodayViewController *weakSelf = self;
NSURL *URL = [NSURL URLWithString:@"http://www.muratekim.com/wp-content/uploads/apple-logo-small.png"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
                              ^(NSData *data, NSURLResponse *response, NSError *error) {
                                  if (!error) {
                                      UIImage *image = [UIImage imageWithData:data];
                                      weakSelf.imageView.image = image;
                                      weakSelf.img = image;
                                      completionHandler(NCUpdateResultNewData);
                                  }
                                  else {
                                      completionHandler(NCUpdateResultFailed);
                                  }
                              }];
[task resume];
}

提前致谢! 泽

0 个答案:

没有答案