0

My iPad universal app has a method I implemented from here:

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;
}

When I write my code like this:

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

I get the warning:

'-isPad' not found in protocol

However, it's declared in my app delegate class:

-(BOOL)isPad;

And in the implementation (above).

Any ideas why this is?

Thanks in advance.

Community
  • 1
  • 1
just_another_coder
  • 1,156
  • 2
  • 13
  • 22

2 Answers2

1

-delegate returns an id<UIApplicationDelegate>. Even if your app delegate supports -isPad, the UIApplicationDelegate does not, which is the warning is about.

You need to cast the return value to your class to eliminate the warning.

YourAppDelClass* appDel = [UIApplication sharedApplication].delegate;
if ([appDel isPad]) {
   ...
kennytm
  • 510,854
  • 105
  • 1,084
  • 1,005
0

The compiler expects to find isPad declared in the uiapplicationdelegate protocol. Try making it an instance method of uiapplication instead.

ennuikiller
  • 46,381
  • 14
  • 112
  • 137