在连接到 Apple Watch 的真实 iPhone 上测试我的“手表应用程序”/iOS 应用程序手表扩展时,我遇到了 MKSnapshotter 的一些重大问题!
在我的一个接口控制器中,我调用了以下函数:
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 Extension[9548:2529231] BSXPCMessage 收到错误消息:连接中断
但最糟糕的部分来了:当我想创建另一个快照时,我的 Watch App 由于内存错误而崩溃!我认为发生这种情况是因为快照程序在分配内存后不会释放内存......我该如何手动执行此操作或有人有其他想法?
它与 getEndRegion() 函数无关!我还使用没有选项的默认快照器对其进行了测试-> 相同的结果!
如果我在模拟器中测试应用程序一切正常!
更新:
我搜索了 MKMapSnapshotter 的文档,它说,如果应用程序在前台,它只能提供快照,因此无法从主应用程序呈现,并且分配给 iOS 手表扩展的内存太低,所以有没有别的办法??