MKMapSnapshotter Ошибка памяти WatchKit
У меня возникли серьезные проблемы с MKSnapshotter при тестировании моего расширения для часов "Watch Application" / iOS для приложения на реальном iPhone, подключенном к Apple Watch!
Внутри одного из моих контроллеров интерфейса я вызываю следующую функцию:
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 МБ до 20 МБ и остается там, даже если я установил options = nil и snapshotter = nil. Также я получаю следующее сообщение на консоли:
Расширение WatchKit [9548:2529231] BSXPCMessage получил ошибку для сообщения: соединение прервано
Но самое страшное: как только я хочу создать еще один снимок, приложение Watch перестает работать из-за ошибки памяти! Я предполагаю, что это происходит потому, что моментальный снимок не освобождает память после ее выделения... Как я могу сделать это вручную или у кого-то есть другая идея?
Это не имеет ничего общего с функцией getEndRegion()! Я также проверил его со стандартным снимком без параметров -> тот же результат!
Если я тестирую приложение в симуляторе, все работает отлично!
ОБНОВИТЬ:
Я искал документацию MKMapSnapshotter и там говорится, что он может доставить моментальный снимок только в том случае, если приложение находится на переднем плане, поэтому его нельзя отобразить из основного приложения, а объем памяти, выделенный для расширения для часов iOS, слишком мал, поэтому Есть ли другой путь??
1 ответ
Симулятор имеет доступ к гораздо большему объему памяти, чем доступно для расширения, работающего на вашем телефоне. Я бы посоветовал снять запрос с вашего приложения для iPhone, используя openParentApplication:reply:
и делать работу там.
Вторичный вопрос: зачем генерировать изображение карты самостоятельно? WKInterfaceMap
по сути, делает это на Watch для вас.