0

我在制作通用应用程序时遇到问题...在应用程序委托中,我为 ipad 和 iphone 设置了主导航:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
 window = [[UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]];
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running iPhone 3.2 or later.
  [self putSplitView];
 } else {
  [self putTabBar];
 }
 [window makeKeyAndVisible]; 
 return YES;
}

- (void)putSplitView {
 RootiPadViewController *rootiPadViewController = [[RootiPadViewController alloc] init];
 UISplitViewController *splitController = [[UISplitViewController alloc] init];
 splitController.viewControllers = [NSArray 
        arrayWithObjects:rootiPadViewController.seccionesView,
                         rootiPadViewController.noticiasView, 
                         nil];
    [window addSubview:splitController.view];
}

- (void)putTabBar {
 TabBarController *tabBar = [[TabBarController alloc] init];
 [window addSubview:tabBar.view];
}

RootiPadViewController 负责加载数据并为 splitView 生成窗格,以便其初始化将 modalView 与加载器结合起来,例如:

@implementation RootiPadViewController

@synthesize seccionesView, noticiasView;

- (id)init {
 if ((self = [super init])) {
  SeccionesVC_iPad *sec = [[SeccionesVC_iPad alloc] init];
  NoticiasVC_iPad *not = [[NoticiasVC_iPad alloc] init];
  self.noticiasView = not;
  self.seccionesView = sec;
  Init *initVC = [[Init alloc] init];
  [self presentModalViewController:initVC animated:YES];
 }
 return self;
}

代码编译时没有警告,但由于某种原因,initVC 的 loadView 方法从未被调用,并且模式视图也没有出现......

任何想法为什么会发生这种情况?感谢您的帮助!

安东尼奥

4

2 回答 2

2

我知道这是去年的问题,但是虽然我认为我找到了原因,但我仍在试图找出一个好的非黑客解决方案来处理这个问题。

假设您正在为 iPad 工作:

初始化时,先调用splitViewController Master的viewDidLoad,再调用Detail的viewDidLoad。

如果您尝试在 Master 的 viewDidLoad 中放置一个模态窗口初始化程序,似乎什么也没有发生:这是因为 Detail 的 viewDidLoad 在您的模态视图的 viewDidLoad 之后执行,导致您的模态视图被隐藏起来。

断点模态视图类,我看到它在模态视图中输入 initWithNibName 。我不使用 ARC,在这里我假设您的模态视图在程序退出之前不会释放 - 模态视图仍然存在,但没有办法得到它。

在 iPhone 中:忽略这一点 - 因为 iPhone 没有 splitViewController。事实上,默认的 Universal splitViewController 项目将 Master 和 Detail 视图视为单独的页面。所以在应用程序初始化时,您只需要担心 Master viewDidLoad。

这就是为什么在通用项目中,在 viewDidLoad 中推送模态视图在 iPhone 模拟器中按预期工作,但在 iPad 模拟器中永远不会。

请注意,这只适用于 viewDidLoad 阶段;如果在 viewDidLoad 之后将模态视图推送到主窗口中,模态视图将按预期工作。

于 2012-01-10T03:12:09.653 回答
1

也许您应该从 RootViewController 'ViewDidLoad' 方法而不是 'init' 方法来展示您的模态 ViewController...不确定视图层次结构是否很快创建

于 2010-07-06T16:35:53.650 回答