application:在viewDidLoad之前加载didFinishLaunchingWithOptions

时间:2011-06-12 12:59:36

标签: iphone objective-c ios cocoa-touch viewdidload

所以我正在编写一个能够读取JSON提要的应用程序。在我的应用程序:didFinishLaunchingWithOptions中,我正在编写一些代码来下载JSON字符串并将其存储到本地NSString变量中。然后我将该字符串传递给ListingsViewController(它是NavigationController的Root VC)。当我在ListingsViewController中打印出JSON数据时,它显示我(null),这让我觉得viewDidLoad之前正在加载 - 这看似不合逻辑?

所以这是我的应用程序:didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Grab the feeds    
    NSURL *jsonURL = [NSURL URLWithString:@"http://www.shoofeetv.com/iphonexml/view/all_channels.json"];
    NSString *jsonData = [[NSString alloc] initWithContentsOfURL:jsonURL];

    // Pass jsonData to the ListingsViewController
    ListingsViewController *listingsViewController = [[ListingsViewController alloc] initWithNibName:@"ListingsViewController" bundle:nil];
    listingsViewController.jsonData = jsonData;
    [listingsViewController release];

    // Display the navigation controller
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

我的viewDidLoad方法如下:

- (void)viewDidLoad {

    self.navigationItem.title = @"Listings";
    UIBarButtonItem *checkinButton = [[UIBarButtonItem alloc]
                                  initWithTitle:@"Check In" 
                                  style:UIBarButtonItemStylePlain
                                  target:self
                                  action:@selector(switchView)];

    self.navigationItem.rightBarButtonItem = checkinButton;
    [checkinButton release];

   NSLog(@"%@", self.jsonData);

   [super viewDidLoad];
}

请注意,常见的解决方案是确保MainWindow.xib中的App Delegate必须连接到文件所有者。我已经连接好了。

我将不胜感激任何帮助!

谢谢大家。

1 个答案:

答案 0 :(得分:0)

您正在使用您的代码设置视图控制器,但它永远不会在导航控制器中显示。您只需设置一个视图控制器,为其jsonData分配一个字符串并立即销毁视图控制器。我非常确定您获得的输出来自您在主XIB中创建的不同视图控制器。 你想要做的是在你的XIB中创建一个空的导航控制器,然后执行以下操作:

// Pass jsonData to the ListingsViewController
ListingsViewController *listingsViewController = [[ListingsViewController alloc] initWithNibName:@"ListingsViewController" bundle:nil];
listingsViewController.jsonData = jsonData;
[self.navigationController pushViewController:listingsViewController animated:NO];
[listingsViewController release];

// Display the navigation controller
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

这实际上会显示您创建的视图控制器。

还要记住,在部署应用程序时,需要异步加载json数据并处理网络错误(apple 在各种网络条件下测试你的应用程序)