【发布时间】:2012-11-14 17:32:52
【问题描述】:
我开发了一个用于滑动 UIView 的通用控制器,并且我管理 UIViewController(显然是子类),并且只有当 UIViewController 的子类响应此方法时才必须调用特定方法(冻结):
-(void)freezeRootViewController
{
if([_rootViewController respondsToSelector:@selector(freeze)])
[ ((id) _rootViewController) freeze];
}
我不知道 _rootViewController 的类,但我知道它是 UIViewController 的子类,因此我尝试将我的 _rootViewController 转换为 ID,但我无法编译:
环境:XCode 4.5.1,带 ARC 的 iOs 4.3+
错误:“不知道选择器‘冻结’的实例方法”
注意:我不能强制开发人员为 _rootViewController 使用特定的 UIViewController 子类。
【问题讨论】:
-
这不是警告而不是错误吗?
-
@H2CO3 不,XCode 4.5.1,带有 ARC 的 iOs 4.3+,不要编译。
-
看我的回答,这应该会有所帮助(顺便说一句,把它变成一个错误是愚蠢的)。
-
这也与Xcode的版本无关,也与clang/GCC的版本无关,似乎与使用的ARC有关。
-
导入定义
freeze方法的头文件。这会让编译器高兴。
标签: objective-c ios