问题描述
|
因此,我正在编写一个将读取JSON Feed的应用程序。在我的application:didFinishLaunchingWithOptions中,我正在编写一些代码来下载JSON字符串并将其存储到本地Nsstring变量中。然后,我将该字符串传递到ListingsViewController(它是NavigationController的Root VC)。当我在ListingsViewController中打印JSON数据时,它显示给我(空),这使我认为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必须连接到文件的所有者。我的已经连接了。
我将不胜感激!
谢谢大家。
解决方法
很好,您正在使用代码设置视图控制器,但是它从未在导航控制器中显示。您只需设置一个视图控制器,为其字符串数据分配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将在各种网络条件下测试您的应用程序)