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 для вас.

Другие вопросы по тегам