アップルでは、同じプロジェクトでiPhoneとiPad間でコードを区切るためのデフォルトのメカニズムを提供します。
Xcode 4では、新しい「ウィンドウベースのアプリケーション」または「ビューベースのアプリケーション」を作成するときに、「デバイスファミリ」を選択するオプションが表示されます。このオプションに "Universal"を選択すると、Xcodeは3つのアプリケーションデリゲートを作成します。
まず、メインアプリデリゲート:
YourAppNameAppDelegate : NSObject <UIApplicationDelegate>
と「YourAppNameAppDelegate」のサブクラスです(別のグループに配置された)二つの他のアプリを委任:
YourAppNameAppDelegate_iPhone : YourAppNameAppDelegate
YourAppNameAppDelegate_iPad : YourAppNameAppDelegate
あなたとあなたのアプリを実行しますiPhoneまたはiPadシミュレータ(またはデバイス)のいずれかを選択すると、アプリケーションは選択したデバイスに基づいて自動的に_iPhoneまたは_iPadのアプリケーションデリゲートサブクラスを使用します。
アプリケーションをオーバーライドする場合: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];
}
これは、あなたが、ユーザーがオンになっているデバイスに基づいてプログラムの流れを変えることができます出発点を与えます。たとえば、メインビューコントローラのサブクラスの1つをインスタンス化する(後述のように)。
新しいビューコントローラをプロジェクトに追加するときには、1つの汎用コントローラスーパークラスとiPhone/iPad固有のサブクラスを作成してこのパラダイムを続行する必要があります。一般的なスーパークラスにはnibファイルが関連付けられてはいけませんが、サブクラスはそれぞれ独自のnibが必要です。
このようにして、3つのクラス間でコードを壊すことができます。例えば、いくつかのプロパティ、メソッド、IBOutlets、IBActionsなど、プラットフォームに依存しないスーパークラスを維持し、プラットフォーム固有の実装をどちらかのサブクラスに配置します。
は涼しいですが、iPad 3または4に網膜が表示されていて、@ HD @ 2xがついているとどうなりますか?それは混乱するだろう。 – Moshe