IOS: добавить печать, но сохранить совместимость с IOS 3 - PullRequest
4 голосов
/ 28 ноября 2010

Я пытаюсь добавить функции печати в приложение ios. Хотя сама печать работает нормально, а приложение работает на ios> 4, я еще не выяснил, как сохранить совместимость с ios 3.1 ...

Я полагаю, что проблема заключается в следующем: завершениеHandler: (UIPrintInteractionCompletionHandler)

Блок типа UIPrintInteractionCompletionHandler, который вы реализуете для обработки завершение задания на печать (например, для сброса состояния) и обрабатывать любые ошибки, обнаруженные при печати. ​​

как только я добавлю блок:

void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
};

приложение даже не запустится на iOS 3.1 вероятно, потому что блоки там не доступны.

да, я убедился, что этот код не будет запускаться при запуске на iOS 3.1 ...

if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.2) && ([UIPrintInteractionController isPrintingAvailable]))

так что мне интересно, есть ли способ обеспечить поддержку печати для iOS> 4.2, но сохранить его для работы на iOS 3.1?

может быть, есть способ использовать метод вместо "блока"? или как правильно сделать печать доступной на поддерживаемых устройствах iOS и поддерживать обратную совместимость с iOS 3.1?

Ответы [ 4 ]

6 голосов
/ 28 ноября 2010

просто добавьте -weak_framework UIKit в настройки проекта в разделе «Другие флаги компоновщика» и убедитесь, что вы используете условный код для печати API.Условный код должен проверять доступность функции, а не версию ОС:

    if (NSClassFromString(@"UIPrintInteractionController")){
    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
    };
}

Установите цель проекта на iOS 3, и все готово.

2 голосов
/ 28 января 2011

Наилучшим способом определения наличия AirPrint является использование NSClassFromString. Если вы используете этот метод в целом, то вы всегда будете знать, доступен ли именно тот класс, который вам нужен, без необходимости жесткого кода, какие функции соответствуют какой версии. Пример кода:

 Class printControllerClass = NSClassFromString(@"UIPrintInteractionController");
 if (printControllerClass) {
   [self setupCanPrintUI];
 } else {
   [self setupCannotPrintUI];
 }

Таким образом, ваше приложение может работать с предыдущими версиями iOS, хотя оно не сможет печатать с них.

Я смог использовать эту технику и запустить ее на устройстве iOS 3.0 без каких-либо проблем с блочным кодом (материал на основе ^). В моих настройках сборки у меня установлен базовый SDK для iOS 4.2, а для цели развертывания - iOS 3.0.

Я опубликовал пример проекта Xcode в конце этого поста о печати в iOS . Это проект, который успешно выполняется для меня на устройстве с iOS 3.0 и другом устройстве с iOS 4.2. Возможно, вам придется изменить идентификатор пакета в info.plist, чтобы подпись кода работала на вас, но это не зависит от материала для печати. ​​

1 голос
/ 28 ноября 2010

Установите целевой объект развертывания в настройках проекта на iOS 3.x.Однако установите Базовый SDK на 4.2.Теперь вы можете использовать классы 4.2, и iPhone под управлением 3.x также может установить ваше приложение.Помните, что при использовании класса 4.2 на iPhone 3.x приложение будет аварийно завершать работу (поэтому продолжайте проверять версию системы на ходу).

0 голосов
/ 06 января 2011
NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare:@"3.2" options: NSNumericSearch];
  if (order == NSOrderedSame || order == NSOrderedDescending && [[UIDevice currentDevice]isMultitaskingSupported]) {
   // >4.2
  }
               else {
                       //< 4.2
                }

Примечание: также изменяет настройку UIKit Framework со «обязательного» на «слабый», это поможет вам запустить приложение на iOs <4.2, а также на iOs> = 4.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...