更新到Xcode 7.3后,它会在pod文件中抛出错误Cannot create __weak reference in file using manual reference counting
。有人解决了这个问题吗?
答案 0 :(得分:173)
将 else if (this.comparePos(this.node.position, this.flags[this._currentMove].position)
设为Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
。
取自Apple Developers Forums - Xcode 7.3b4, non-arc, cannot create __weak reference。
答案 1 :(得分:20)
这是来自Apple的官方回答:
此问题的行为基于以下内容:我们在 在所有Objective-C语言中实现弱引用的过程 模式。因为“__weak”在非ARC(和 非GC)语言模式,我们添加了这个错误来指出地方 语义将来会改变的地方。请更新您的错误 报告告诉我们这是否仍然是您的问题。
所以基本上,如果你将Pod用于第三方库,你必须在非ARC中删除__weak或等待更新。
更新@ 3/23
我应该研究更多关于我可以传递给编译器以便绕过这些东西的标志。但从根本上说,您不应该在非ARC模式下使用__weak
来避免任何意外冲突。对于cocoapods用户,您不需要删除__weak
或等待更新,而是将构建设置中的Weak References in Manual Retain Release
标记设置为YES,如Lean所说。希望这有帮助。
答案 2 :(得分:20)
解决此问题的最佳方法是在您的Podfile中添加post_install
脚本,将所有pod目标中的Weak References in Manual Retain Release
标记设置为yes
。为此,只需将以下代码粘贴到Podfile
。
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
end
有时,这样做会导致错误-fobjc-weak is not supported on the current deployment target
。您可以通过添加其他配置选项来解决这个问题,强制所有pod定位到您想要的版本(based on this answer):
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.3'
end
end
end
答案 3 :(得分:8)
FBSettings.m中的Facebook弱引用的解决方法
对于Podfile,可以编写一个脚本,以便在pod安装/更新后运行,在那里描述以下内容。
post_install do | installer |
classy_pods_target = installer.pods_project.targets.find {| target | target.name == 'Facebook-iOS-SDK'}
classy_pods_target.build_configurations.each do | config |
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
CLANG_ENABLE_OBJC_WEAK如何找到那个神奇的话。
答案 4 :(得分:7)
我找到了这个。
我想这意味着删除__weak
https://forums.developer.apple.com/thread/38934
呃,在MRR [手动保留 - 释放]下,有没有像弱变量引用这样的东西? " __弱"意味着两件事中的一件或两件:
无主参考(即不代表保留计数)。
- 醇>
归零引用(即当引用的对象被释放时运行时为零)。
#1不适用于MRR,因为您无论如何都不会保留变量。
#2也不适用于MRR,因为运行时支持在GC和ARC [自动引用计数]中,您不会使用它。
听起来好像编译器现在只是在抱怨它无法做到它从未做过的事情。 (对于应用程序委托,您无法在运行时分辨出差异,因为应用程序委托通常永远不会被释放。)
答案 5 :(得分:1)
只需转到“Build Phases”选项卡中的目标,在“Compile Sources”中查找pod文件,单击这些文件并添加编译器标志“-fobjc-arc”
答案 6 :(得分:0)
或将__weak
更改为__unsafeunretained
。这将解决传统问题。由于MRC(在xCode 4 - 之前)__ weak不在iOS中。