2

在连接到 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 手表扩展的内存太低,所以有没有别的办法??

4

1 回答 1

0

模拟器可以访问的内存比手机上运行的扩展可用的内存要多得多。我建议您使用 iPhone 应用程序开始请求openParentApplication:reply:并在那里完成工作。

第二个问题:为什么要自己生成地图图像?WKInterfaceMap本质上是在 Watch 上为您执行此操作。

于 2015-04-29T09:52:05.827 回答