Похоже, что ваше черновое решение - единственный вариант, о котором я знаю - любопытно увидеть другие ответы.
Одна вещь, хотя; вы могли бы на самом деле сохранить два отдельных AppDelegates.
В рамках основной реализации вы можете проверить устройство и запустить iPad-AppDelegate или iPhone-AppDelegate.
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = 0;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPad");
}
else
{
retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPhone");
}
[pool release];
return retVal;
}
Однако в большинстве случаев я бы посоветовал переосмыслить такое решение - достаточно часто это приводит к несоответствиям и / или репликации кода. Тем не менее, я подумал, что должен указать на вариант.