iOS 7: 'isa'已弃用

7

当我在iOS7上运行我的应用程序时,我收到了一个警告:“'isa'已过时”,我不知道如何修复此警告消息。请有人帮助解决。

array->isa      = _JKArrayClass;

1
我建议从你的项目中移除JSONKit。首先,它不兼容64位架构,因为使用了语言黑科技。 - macbirdie
2个回答

17

包含<objc/runtime.h>

将所有类似于array->isa = _JKArrayClass;的内容替换为object_setClass(array, _JKArrayClass)

将所有类似于class = array.isa的内容替换为class = object_getClass(array)


还有,请在GitHub上分享您的分支吗? - Ali
我在一个构建版本中遇到了这个错误两次。你的修复方法对其中一个有效,但另一个似乎是在一个库中,我无法编辑或保存它。请问我该如何修复那一个呢?我不确定这个库是从哪里来的。 - CthulhuJon

15

我想与使用Cocoapods的读者分享我的解决方案。(如果您找到更好的解决方案,请在评论中告诉我)

我正在使用Cocoapods,因此不希望修改我引入的库的源代码。问题是Cocoapods将“直接使用'isa'”值设置为“Yes(视为错误)”,从而导致所有自动构建失败。

我通过将以下内容添加到我的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设备构建中(使用Xcode 5.1.0),奇怪的是CLANG_WARN_DIRECT_OBJC_ISA_USAGE ='YES'选项将无法正确应用(视为错误)。 如果需要构建,包括arm64,则只能使用CLANG_WARN_DIRECT_OBJC_ISA_USAGE ='NO'选项。


1
谢谢,这个可行。在Xcode 5.0.2 (5A3005)和Mavericks 19.9.1中测试过。 - keithics
很不幸,我的pod更新在应用此补丁时失败了。关于错误没有详细信息:LoadError - no such file to load... 我正在使用Xcode 5.1和i0S 7.1。你有任何想法吗?谢谢。 - Lisarien
那个错误信息并没有提供太多有用的信息。如果我没记错,这个错误是由JSONKit引起的。如果这个错误是由一个Pod引起的,那么这个修复方法(我没有测试过)应该有效。否则,你应该可以在你的代码中修复它。你已经解决了吗? - bsarrazin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接