I am having problems with my universal app. I have set the Base SDK to iPhone 3.2 and set the target to 3.1.
I have moved the files that are using the UIPopoverCont
I strongly recommend you not weakly link UIKit. As KennyTM and I mentioned in our comments, this may hide future linker issues and result in crashes. I'm also simply not comfortable with telling the linker that UIKit is optional when it plainly isn't. Big hack.
Instead, initialize and call UIPopoverController indirectly using NSClassFromString:
Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
self.myPopover = [[popover alloc] initWithContentViewController:myContent];
}
If you still have linker errors, you may need to call UIPopoverController's messages using NSSelectorFromString:
Class popover = NSClassFromString(@"UIPopoverController");
if (nil != popover)
{
SEL myInit = NSSelectorFromString(@"initWithContentViewController:");
self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent];
}
For portability, I recommend writing a proxy object to handle these implementation details.
Even if they're not loaded in runtime, those files are still processed in linking. The symbol _OBJC_CLASS_$_UIPopoverController
is therefore added into your app as one of those requiring dynamic linking.
There are 2 workarounds,
[UIPopoverController alloc]
) with NSClassFromString(@"UIPopoverController")
, or