2016-06-14 20 views
20

刚刚更新我的项目到Xcode 8,我发现这个错误在我的应用程序包括多个外部框架。有没有解决方法,也许触摸设置,以避免此编译错误?Xcode 8:'objc_unretainedPointer'is unavailable使用__bridge cast代替

这是一个错误例如:(那我不能修改,因为它是一个进口框架)

const void * ivarPtr = objc_unretainedPointer(self) + ivar_getOffset(ivar); 
[decoder decodeValueOfObjCType:[ivarInfo[@"encoding"] UTF8String] at:(void *)ivarPtr]; 
+0

显示导致错误的行和完整的错误消息。 – Droppy

+0

什么是'ivar'?你能提供更多的背景吗? – JAL

+0

ivar is Ivar ivar = class_getInstanceVariable(ivarInfo [@“class”],[ivarName UTF8String]);但是我相信这不是相关的,因为我们可以在那里修改一些内容,因为我们正在讨论的是代码,它是来自外部方的外部框架。 – tonik12

回答

18

对于Xcode中8,它应该是:

const void * ivarPtr = (__bridge void *)(self) + ivar_getOffset(ivar); 
+0

这并不能解决问题,因为这是发生在外部框架中,我没有修改的能力。 – tonik12

+0

@ user2461338因此,您正在寻求一种不需要更改代码的解决方案? – Droppy

+0

我相信这是唯一的方法。如果没有,我会很高兴听到。 – tonik12

2

你可以简单地将objc_unretainedPointer(self)更换为(__bridge void *)(self)