Я разрабатываю приложение с использованием SDK 8.1, Apple LLVM 6.0 и Xcode 6.1.1. Цель развертывания - 6.0. Я использую NSOperationQueue
, и я хочу использовать QoS всякий раз, когда он доступен.Использование новых функций при поддержке старых версий iOS
код я использую:
if ([self.operationQueue respondsToSelector:@selector(setQualityOfService:)]
&& (&NSOperationQualityOfServiceUserInitiated)) {
[self.operationQueue performSelector:@selector(setQualityOfService:) withObject: NSOperationQualityOfServiceUserInitiated];
} else {
//Other stuff not related to the scope of this question
}
Ошибки я получаю:
Использование необъявленной идентификатора 'NSOperationQualityOfServiceUserInitiated'
Я добавил if (&NSOperationQualityOfServiceUserInitiated)
часть в проверьте, существует ли эта константа. Этот код работал со старыми версиями компилятора Xcode/Obj-C.
Я могу использовать селекторы с performSelectorWithIdentifier
, но как насчет констант, которые не имеют определенного значения в документах? Значение этой константы задается NSQualityOfServiceUserInitiated
, но для этого значения не существует определения, которое может быть жестко запрограммировано.
Как это исправить?
В дополнение к методу 'qualityOfService' нет необходимости проверять' & NSOperationQualityOfServiceUserInitiated'. Оба были добавлены вместе в iOS 8. – rmaddy
Зачем использовать 'performSelector: withObject:' для вызова метода 'qualityOfService'? Просто вызовите метод напрямую. – rmaddy
Если я попытаюсь использовать его напрямую, я получаю еще больше ошибок, например 'No visible @interface для NSOpertaionQueue объявляет селектор qualityOfService:':/Это не похоже на GCC ... – fpg1503