Apple теперь предоставляет вам механизм по умолчанию для разделения вашего кода между iPhone и iPad в одном проекте.
В Xcode 4, когда вы создаете новое «оконное приложение» или «View-Приложение », вам предоставляется возможность выбрать« Семейство устройств ».Если вы выберете «Универсальный» для этой опции, Xcode создаст 3 делегата приложения.
Сначала, делегат основного приложения:
YourAppNameAppDelegate : NSObject <UIApplicationDelegate>
и два других делегата приложения (помещенные в отдельные группы)которые являются подклассами «YourAppNameAppDelegate»:
YourAppNameAppDelegate_iPhone : YourAppNameAppDelegate
YourAppNameAppDelegate_iPad : YourAppNameAppDelegate
Когда вы запускаете свое приложение с помощью имитатора (или устройства) iPhone или iPad, приложение автоматически использует подкласс делегата приложения _iPhone или _iPad на основевыбранное устройство.
Если вы переопределите application: didFinishLaunchingWithOptions: метод в каждом подклассе, вы увидите, что это работает:
// In YourAppNameAppDelegate_iPhone.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"iPhone App Delegate");
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
// In YourAppNameAppDelegate_iPad.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"iPad App Delegate");
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
Это дает вам отправную точку, где вы можете изменять поток программы на основеустройство, на котором находится пользователь.Например, создав экземпляр одного из подклассов вашего основного контроллера представления (как описано ниже).
По мере добавления новых контроллеров представления в ваш проект, вы должны продолжить эту парадигму, создав один универсальный суперкласс контроллера иiPhone / iPad специфический подкласс.Обратите внимание, что универсальные суперклассы не должны иметь связанные с ними nib-файлы, в то время как каждый из подклассов должен иметь свой собственный отдельный nib.
Таким образом, вы можете разбить код между тремя классами, сохраняя независимость от платформы.суперкласс - например, некоторые свойства, методы, IBOutlets и IBActions - и помещают специфичные для платформы реализации в любой подкласс.