代码之家  ›  专栏  ›  技术社区  ›  just_another_coder

iPadUniversal应用程序具有“未在协议中找到”警告的方法,但它可以工作

  •  0
  • just_another_coder  · 技术社区  · 16 年前

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

    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”

    但是,它在我的应用程序委托类中声明:

    -(BOOL)isPad;
    

    以及在实施中(如上)。

    你知道为什么吗?

    事先谢谢。

    2 回复  |  直到 16 年前
        1
  •  1
  •   kennytm    16 年前

    -delegate 返回一个 id<UIApplicationDelegate> . 即使 您的应用程序代理 支架 -isPad ,uiapplicationDelegate没有,这是一个警告。

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

    YourAppDelClass* appDel = [UIApplication sharedApplication].delegate;
    if ([appDel isPad]) {
       ...
    
        2
  •  0
  •   ennuikiller    16 年前

    编译器需要找到在uiapplicationDelegate协议中声明的ispad。尝试将其改为uiapplication的实例方法。

    推荐文章