iOS 7: "isa" устарела

Когда я запускаю свое приложение в iOS7, я получаю предупреждение "isa" устарела ", я не знаю, как исправить это предупреждение. Пожалуйста, помогите.

array->isa      = _JKArrayClass;

2 ответа

Решение

Включают <objc/runtime.h>,

Заменить все как array->isa = _JKArrayClass; с object_setClass(array, _JKArrayClass)

И все как class = array.isa с class = object_getClass(array)

Я решил поделиться своим решением для вас, пользователей Cocoapods. (Пожалуйста, дайте мне знать в комментариях, если вы нашли лучшее решение)

Я использую Cocoapods, и по этой причине я не хочу изменять исходный код библиотек, которые я добавляю. Проблема вызвана тем, что Cocoapods устанавливает значение "Прямое использование isa" в "Да" (рассматривается как ошибка). ", что приводит к сбою всех автоматизированных сборок.

Я исправил проблему, добавив это в мой Podfile:

post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['CLANG_WARN_DIRECT_OBJC_ISA_USAGE'] = 'YES'
        end
    end
end

Таким образом, прямое использование isa будет отображаться как предупреждение, но не приведет к сбою автоматической сборки.

Но в arm64 iOS Device build(с Xcode 5.1.0) странным образом опция CLANG_WARN_DIRECT_OBJC_ISA_USAGE = 'YES' не будет применена должным образом (рассматривается как ошибка). Если вам нужно собрать, включая arm64, просто используйте CLANG_WARN_DIRECT_OBJC_ISA_USAGE = 'NO'.

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