在连接到Apple Watch的真实iPhone上测试我的"手表应用程序"/iOS应用程序手表扩展时,MKSnapshoter出现了一些重大问题!
在我的一个接口控制器中,我调用以下函数:
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)
}
}
}
这应该创建一个地图的图像,并用它填充我的WKInterfaceImage。一旦我创建了图像,我的内存就会从大约3 MB跳到20 MB,并保持在那里,即使我设置了options=nil和snapshotter=nil。此外,我在控制台上打印了以下消息:
WatchKit扩展[9548:2529231]BSXPC消息接收到消息错误:连接中断
但最糟糕的是:当我想创建另一个快照时,我的手表应用程序因内存错误而崩溃!我认为发生这种情况是因为快照程序在分配内存后不会释放内存…我该如何手动释放内存,或者有人有其他想法?
它与getEndRegion()函数无关!我还用默认的snapshotter测试了它,没有选项->相同的结果!
如果我在模拟器中测试应用程序,一切都很好!
更新:
我搜索了MKMapSnapshoter的文档,它说,只有当应用程序在前台时,它才能提供快照,因此无法从主应用程序渲染,并且分配给iOS手表扩展的内存太低,所以有其他方法吗??
模拟器可以访问比手机上运行的扩展程序多得多的内存。我建议使用openParentApplication:reply:
向你的iPhone应用程序发出请求,然后在那里完成工作。
第二个问题:为什么要自己生成地图的图像?WKInterfaceMap
本质上是在为你守望相助。