在连接到 Apple Watch 的真实 iPhone 上测试我的“ watch 应用程序”/iOS 应用程序 watch 扩展时,我遇到了 MKSnapshotter 的一些重大问题!
在我的一个接口(interface) Controller 中,我调用了以下函数:
func createMapSnapshot(){
//Snapshotter for overview image
self.options = MKMapSnapshotOptions()
self.options!.region = getEndRegion()
self.snapshotter = MKMapSnapshotter(options: options!)
snapshotter!.startWithCompletionHandler() {snapshot, error in
dispatch_async(dispatch_get_main_queue()) {
var finalImage = self.drawEndRun(snapshot.image, snapshot: snapshot)
self.mapImage.setImage(finalImage)
}
}
}
这应该创建 map 图像并用它填充我的 WKInterfaceImage。
一旦我创建了图像,我的内存就会从大约 3 MB 跳到 20 MB 并保持在那里,即使我设置了 options = nil 和 snapshotter = nil。我还在控制台上打印了以下消息:
WatchKit Extension[9548:2529231] BSXPCMessage 收到错误消息:连接中断
但最糟糕的部分来了:当我想创建另一个快照时,我的 Watch App 由于内存错误而崩溃!我认为发生这种情况是因为快照程序在分配内存后不会释放内存......我该如何手动执行此操作或有人有其他想法?
它与 getEndRegion() 函数无关!我还使用没有选项的默认快照器对其进行了测试-> 相同的结果!
如果我在模拟器中测试应用程序一切正常!
更新:
我搜索了 MKMapSnapshotter 的文档,它说,如果应用程序在前台,它只能提供快照,因此无法从主应用程序呈现,并且分配给 iOS watch 扩展的内存太低,所以有没有别的办法??
最佳答案
模拟器可以访问的内存比手机上运行的扩展可用的内存要多得多。我建议使用 openParentApplication:reply:
向您的 iPhone 应用发起请求。并在那里工作。
第二个问题:为什么要自己生成 map 图像? WKInterfaceMap
本质上是在 Watch 上为您执行此操作。
关于ios - MKMapSnapshotter WatchKit 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938216/