iPad通用应用程序的方法有“未找到协议”警告,但它有效

时间:2010-07-08 11:13:21

标签: ipad

我的iPad通用应用程序有一个我从这里实现的方法:

Best way to programmatically detect iPad/iPhone hardware

-(BOOL)isPad
{
  BOOL isPad;
  NSRange range = [[[UIDevice currentDevice] model] rangeOfString:@"iPad"];
  if(range.location==NSNotFound) isPad=NO;
  else isPad=YES;
  return isPad;
}

当我写这样的代码时:

if( [[[UIApplication sharedApplication] delegate] isPad] ) // do something

我收到警告:

' - 在协议中找不到isPad'

但是,它在我的app委托类中声明:

-(BOOL)isPad;

在实施中(上图)。

为什么会这样?

提前致谢。

2 个答案:

答案 0 :(得分:1)

-delegate会返回id<UIApplicationDelegate>。即使你的app委托支持-isPad,UIApplicationDelegate也不支持,这就是警告。

您需要将返回值强制转换为类以消除警告。

YourAppDelClass* appDel = [UIApplication sharedApplication].delegate;
if ([appDel isPad]) {
   ...

答案 1 :(得分:0)

编译器期望在uiapplicationdelegate协议中找到声明的isPad。尝试使它成为uiapplication的实例方法。