2011-06-12 180 views
0

因此,我正在編寫一個將讀取JSON訂閱源的應用程序。在我的應用程序中:didFinishLaunchingWithOptions,我正在編寫一些代碼來下載JSON字符串並將其存儲到本地NSString變量中。然後我會將該字符串傳遞給ListingsViewController(這是NavigationController的Root VC)。當我在ListingsViewController中打印出JSON數據時,它顯示我(空),這讓我認爲viewDidLoad之前加載 - 這似乎不合邏輯?application:didFinishLaunchingWithOptions在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]; 
} 

請注意,通常的解決辦法是確保在App委派的MainWindow.xib必須連接到文件的所有者。我的礦井已經連通。

我會感謝任何幫助!

謝謝大家。

+0

哦也,當我放了兩個NSLogs在每個函數中,viewDidLoad NSLog首先出現..謝謝! – darksky 2011-06-12 13:01:48

回答

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數據和處理網絡錯誤(蘋果測試各種網絡條件下,你的應用程序)

+0

謝謝..我現在試試你的建議。另外,通過「異步加載」你的意思是我需要使用NSURLConnection下載數據並檢查它是否下載? – darksky 2011-06-12 13:38:01

+0

好吧,它現在的作品。數據正在被正確傳遞給視圖控制器,但我有一個小問題。我做的是添加「[self.navigationController pushViewController:listingViewController animated:NO];」但現在問題在於它顯示爲左上角的「根視圖控制器」中的「後退」按鈕。我想我沒有得到「在你的XIB中創建一個空的導航控制器」部分。你能幫我解決這個問題嗎? – darksky 2011-06-12 13:43:33

+0

是的,你必須這樣做。或者在本地下載和存儲,只檢查更新 - 然後當網絡不可用時,您可以使用本地內容。 – 2011-06-12 13:44:04

相關問題