Apple Watch に接続された実際の iPhone で「ウォッチ アプリケーション」/iOS アプリのウォッチ拡張機能をテストすると、MKSnapshotter に大きな問題が発生します。
インターフェイス コントローラーの 1 つの内部で、次の関数を呼び出します。
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 に跳ね上がり、オプション = nil およびスナップショット = nil に設定しても、そこにとどまります。また、コンソールに次のメッセージが出力されます。
WatchKit 拡張 [9548:2529231] BSXPCMessage は、メッセージのエラーを受信しました: 接続が中断されました
しかし、ここで最悪の事態が発生します。別のスナップショットを作成しようとするとすぐに、メモリ エラーが原因で Watch アプリがクラッシュします。これは、スナップショット作成者がメモリを割り当てた後に解放しないために発生すると思います...どうすれば手動でそれを行うことができますか、または誰かが別のアイデアを持っていますか?
getEndRegion() 関数とは関係ありません。オプションなしのデフォルトのスナップショットでもテストしました->同じ結果です!
シミュレーターでアプリをテストすると、すべて正常に動作します。
アップデート:
MKMapSnapshotter のドキュメントを検索したところ、アプリがフォアグラウンドにある場合にのみスナップショットを配信できるため、メインのアプリケーションからレンダリングできず、iOS ウォッチ拡張機能に割り当てられたメモリが低すぎるため、他の方法はありますか??