私は iOS が初めてで、分割ビューのマスター ディテール コントローラーの実装に苦労しています。新しいプロジェクトを作成しました
- マスター ディテール アプリケーション ユニバーサル アプリを使用し、ARC、ストーリー ボード、およびコア データを使用します。
- 詳細ビューコントローラーをタブバーコントローラーに埋め込みました
- 詳細ビューコントローラーの前にナビゲーションコントローラーを追加しました
- タブバーコントローラーを初期ビューコントローラーにしました。
ストーリーボードは下の画像のようになります
http://i40.tinypic.com/2e1ccg9.png
Split View をルート ビュー コントローラーにする必要があるという古い投稿や Apple のヒューマン インターフェイス ガイドラインを読んだことがありますが、Tripadvisor や Yelp などのアプリも見てきました。同じものを実装しており、Apple によって承認されています。
コア データがなくても動作させることができますが、コア データ テンプレートを使用してプロジェクトを開始すると、動作しないようです。プログラムを実行すると、次のエラーが表示されます。
2013-07-11 04:54:44.207 Trial4[21421:c07] -[UISplitViewController topViewController]: インスタンス 0x8424990 に送信された認識されないセレクター 2013-07-11 04:54:44.211 Trial4[21421:c07 ] exception 'NSInvalidArgumentException', reason: '-[UISplitViewController topViewController]: unrecognized selector sent to instance 0x8424990' * First throw call stack: (0x1fa7012 0x13e4e7e 0x20324bd 0x1f96bbc 0x1f9694e 0x2643 0x16157 0x16747 0x1794b 0x28cb5 0x29beb 0x1b698 0x1f02df9 0x1f02ad0 0x1f1cbf5 0x1f1c962 0x1f4dbb6 0x1f4cf44 0x1f4ce1b 0x1717a 0x18ffc 0x24ad 0x23d5) libc++abi.dylib: 例外をスローして呼び出された終了 (lldb)
したがって、問題は、AppDelegate.m にいくつかのコードを実装する必要があることだと思います。実装する必要があるコードを手伝ってくれる人がいますか?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
UINavigationController *masterNavigationController = splitViewController.viewControllers[0];
MasterViewController *controller = (MasterViewController *)masterNavigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
} else {
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
return YES;
}
同じものを実装する方法(上記のコードを変更する)と、マスタービューコントローラーを追加する必要がある場合はどうすればよいか教えてください。
ありがとう
以下のようにコードを変更することで、アプリの iphone 部分が機能するようになりました。iPadコードを変更するための提案を提供できる人:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
UINavigationController *masterNavigationController = splitViewController.viewControllers[0];
MasterViewController *controller = (MasterViewController *)masterNavigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
} else {
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = tabBarcontroller.viewControllers[0];
MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
return YES;
}
ここに私が達成しようとしているもののいくつかの写真が含まれています:
ランドスケープモードでの iPad の Yelp からのスクリーンキャプチャ: http://i40.tinypic.com/11uf1af.png