Xcode 6 GM版本,iPhone 6模拟器,“UITapGestureRecognizer”的可见@interface未声明选择器“initWithTarget:action:”。

11
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];

这段代码可以在Xcode 5的任何模拟器上编译,

但在Xcode 6中,它只能编译32位CPU(iPhone 5及以下)的模拟器,

编译64位CPU(iPhone 5s、iPhone 6、iPhone plus)的模拟器时,编译器会出现以下错误:

no visible @interface for 'UITapGestureRecognizer' declares the selector 'initWithTarget:action:'

但我已经导入了<UIKit/UITapGestureRecognizer>

问题出在哪里?


@import UIKit; 会改变这种行为吗? - quellish
我已经反汇编了UIKit的64位模拟器二进制文件,符号确实存在。initWithTarget:action:是从UIGestureRecognizer继承而来的。如果您没有包含所有的UIKit,那可能会解释您的问题,但@import会修复这个问题。问题可能出在您的构建配置中的某些地方。 - quellish
2
在您的项目的“构建设置”中查找“语言模块”,寻找“启用模块(C和Objective-C)”,如果它是“YES”,则将其更改为“NO”。 - Sarim Sidd
1
@CarmeloS,你的构建设置中“Base SDK”的值是多少? - quellish
1
@ChrisTruman 请看我的下面回答。 - CarmeloS
显示剩余3条评论
4个回答

22

首先尝试使用 Product > Clean 菜单 (即按下 command + shift + k)。
如果这不起作用,可以尝试使用 option 键和 Product > Clean Build Folder... 菜单 (即按下 option + command + shift + k)。
最后,可以使用 rm -rf ~/Library/Developer/Xcode/DerivedData/ 命令删除所有派生数据目录。

我认为由旧的 SDK(Xcode5)生成的 ~/Library/Developer/Xcode/DerivedData/ModuleCache/* 目录可能会导致此问题。


谢谢,遵循这些步骤确实有助于解决问题。 - Rinat Khanov
有人知道为什么会出现这种情况吗?我偶尔还是会看到它,特别是在 Xcode 服务器上运行和测试配置中构建时。真的很烦人,想要找到问题的根源。 - czechboy

3
当我更新到xCode GM时,这个问题开始出现,只有在选择5s、6、6+模拟器时才会出现。其他的都没有问题。删除~/Library/Developer/Xcode/DerivedData/ModuleCache对我有用。

1
我删除了Xcode 5软件包并重新启动了我的Mac,然后神奇地它现在可以工作了,但是我仍然不知道原因。

我在安装GM之前清除了旧版本的Xcode,但仍然看到这个问题... - Chris Truman

0

以上的缓存清理技巧都没有起作用。但是当我将部署目标更改为低于iOS 8.1时,错误消失了。


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