Теперь Apple предоставляет вам механизм по умолчанию для разделения кода между iPhone и iPad в рамках одного проекта.
В Xcode 4, когда вы создаете новое «приложение на основе окна» или «приложение на основе представления», вам предоставляется возможность выбрать «семейство устройств». Если вы выберете «Универсальный» для этой опции, 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. Обратите внимание, что общие суперклассы не должны иметь связанных с ними файлов пера, в то время как подклассы должны иметь каждый свой собственный отдельный кончик.
Таким образом, вы можете разбить свой код между тремя классами, сохраняя в суперклассе вещи, не зависящие от платформы, например, некоторые свойства, методы, IBOutlets и IBActions, и помещать специфичные для платформы реализации в любой из подклассов.
person
Jo-el
schedule
08.04.2011