Код iOS4 на устройствах iOS3 - PullRequest
4 голосов
/ 19 июля 2010

Возможно ли иметь определенный код iOS4 (т. Е. Наложения MKMapView) в приложении, выполнить сборку с использованием 4.0, установить для цели развертывания значение 3.0 и по-прежнему работать, пока код iOS4 не вызывается на 3 .x устройство?

Я пытаюсь сделать это сейчас, и вызываю код iOS4 только в том случае, если устройство поддерживает его, но я не могу его установить. ГБД бесится. Вот что я получу при сборке для устройства iOS3:

dyld: Symbol not found: _OBJC_CLASS_$_MKOverlayView
Referenced from: /var/mobile/Applications/1EE8EC13-FA01-43CB-A617-9B5D268ECD13/maps.app/maps
Expected in: /System/Library/Frameworks/MapKit.framework/MapKit

Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.)
mi_cmd_stack_list_frames: Not enough frames in stack.
mi_cmd_stack_list_frames: Not enough frames in stack.

Я хочу, чтобы это приложение работало на 3.0 и выше, и использую новый оверлей MKMapView на устройствах 4.0.

В частности, я реализую код наложения мозаичного изображения, продемонстрированный на WWDC, который использует пользовательский TileOverlay, реализующий протокол MKOverlay, и пользовательский TileOverlayView, который является подклассом MKOverlayView.

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Необходимо создать с базовым SDK, установленным на 4.0, и целевым объектом развертывания, установленным на 3.0.

Затем при попытке использовать класс, существующий только в 4.0, используйте NSClassFromString ("MKOverlayView") иликак бы это ни называлось.Это вернет ноль, если класс не существует.

Это сообщение от Мэтта Галлахера содержит более подробные советы для такой ситуации:

http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html

1 голос
/ 19 июля 2010

Попробуйте слабое связывание инфраструктуры MapKit.

...