application: didFinishLaunchingWithOptions загружается перед viewDidLoad - PullRequest
0 голосов
/ 12 июня 2011

Итак, я пишу приложение, которое будет читать канал JSON. В моем приложении: didFinishLaunchingWithOptions я пишу некоторый код для загрузки строки JSON и сохранения ее в локальной переменной NSString. Затем я передам эту строку в ListingsViewController (который является корневым VC NavigationController). Когда я распечатываю данные JSON в ListingsViewController, он показывает мне (ноль), что заставляет меня думать, что 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 был подключен к владельцу файла. Моя уже подключена.

Буду признателен за любую помощь!

Спасибо всем.

1 Ответ

0 голосов
/ 12 июня 2011

хорошо, вы настраиваете контроллер представления с вашим кодом, но он никогда не показывается в контроллере навигации.Вы просто устанавливаете контроллер представления, назначаете его 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 будет тестировать ваше приложение в различных условиях сети)

...