2015-02-25 3 views
1

Сценарий является основным: есть 2 контроллера вида - простая (ничего, кроме кнопки), и контроллер mapview, в котором есть mapkit mapview.Неподдерживаемый формат фреймбуфера в ios 8

На карте есть одна аннотация с выноском, которое при нажатии на нее направляет контроллер открытого вида на контроллер навигации. В обычном контроллере, когда нажата кнопка, он выталкивает контроллер mapview (новый экземпляр).

Так что это примерно в 22 раза приводит к тому, что плитки карты не отображаются, а изображение карты мерцает. Если вернуться к предыдущему контроллеру карты, карта отобразится и будет работать нормально.

Когда происходит мерцание, печатает эту ошибку в отладке несколько раз

ERROR /SourceCache/VectorKit/VectorKit-992.19/GeoGL/GeoGL/GLCoreContext.cpp 1251: Unsupported framebuffer format 

Это было сделано с IPad 4, ИОС 8.1.3

Это известная проблема?

+1

... поэтому после того, как вы нажмете кнопку 22 раза, у вас есть 44 контроллера вида в стеке навигации? – Tommy

+0

Если вы чувствуете, что это ошибка, вы должны подать радар в инструмент репортера ошибок яблок. – iCaramba

+0

@ Tommy да, почему это проблема? Ошибка не указывает на то, что проблема связана с контроллером навигации –

ответ

3

У вас есть 21 контроллер карт Kit. Каждый контроллер представления настраивает буфер кадра для отображения данных векторной карты. Когда ваше устройство пытается установить этот последний контроллер, он не может выделить еще один буфер. Но код продолжает выполняться в течение короткого времени. Затем другой код пытается использовать этот плохой буфер и выдает ошибку, которую вы видите.

Способ устранения этого заключается в том, чтобы не создавать так много контроллеров представления Map Kit. Вместо того, чтобы нажимать новый контроллер просмотра, используйте метод - setViewControllers:animated: для UINavigationController, чтобы обменять ваши два контроллера. Где вы сейчас просто толкая новую копию зрения контроллеров, попробовать что-то вроде:

NSMutableArray *vcArray = [self.navigationController.viewControllers mutableCopy]; 
if (vcArray.count > 1) { 
    UIViewController *backVC = vcArray[vcArray.count - 2]; 
    vcArray[vcArray.count - 2] = self; 
    vcArray[vcArray.count - 1] = backVC; 
    [self.navigationController setViewControllers:vcArray animated:YES]; 
} else { 
    [self.navigationController pushViewController:[self otherVC] animated:YES]; 
} 

Это предполагает, что вы есть метод -otherVC, что вендов соответствующий контроллер представления. Это также предполагает, что используются только эти два контроллера представления, поэтому вы можете изменить оператор if, чтобы он соответствовал логике функций вашего приложения.

Единственная причина, по которой я могу думать о том, почему вам действительно нужны 21 различный контроллер отображения Map Kit, заключается в том, что каждый из них должен отображать другое местоположение на карте. Используйте другой метод для хранения местоположения для каждого из этих контроллеров представления, а затем нажимайте эту информацию на одну карту каждый раз, когда она отображается. Вы можете сохранить несколько значений, таких как местоположение и увеличение карты, а не все дополнительное хранилище, необходимое для настройки полного контроллера отображения карты.

Смежные вопросы