Если я использую следующий код для того, чтобы установить AppDelegate-х managedObjectContext
к firstViewController
, который только подкласс UITableViewController
в AppDelegate.m
«s application: didFinishLaunchingWithOptions
метода,managedObjectContext равно нулю, если я установить его в качестве использования имущества, но не нулевое значение, если я установить его в качестве цепного контроллера
rootTabBarController *rootabbarcontroller = (rootTabBarController *)self.window.rootViewController;
UINavigationController *navigationController = [[rootabbarcontroller viewControllers] objectAtIndex:0];
FirstViewController *firstViewController = [[navigationController viewControllers] objectAtIndex:0];
firstViewController.managedObjectContext = self.managedObjectContext;
, а затем запустить симулятор, значение managedObjectContext
устанавливаются в ненулевой в FirstViewController.m
» viewDidLoad
метода s, и, следовательно, основные данные работают, как ожидалось.
Однако, когда я пытался писать следующий код в методе application: didFinishLaunchingWithOptions:
:
_firstViewController.managedObjectContext = self.managedObjectContext;
и запустить имитатор, полученный managedObjectProperty
значение в пределах viewDidLoad
метода FirstViewController.m
«ы установлен в null
.
Так почему же первая реализация, которая связана с корневым UITabBarController от корневого UINavigationController до FirstViewController, работает в своем методе viewDidLoad:
, но последний (просто установленный на его свойство) не делает этого.
Стоит отметить, что я объявил @property (nonatomic, strong) FirstViewController *firstViewController;
в AppDelegate.h
, когда я попытался реализовать последним способом. Также установите его класс на соответствующий контроллер представления в раскадровке.
Я прочитал некоторые блоги, чтобы использовать последний подход (ссылки не удобны, извините), поэтому можно было бы использовать последний маршрут, чтобы правильно установить его значение managedObjectContext
и синтезировать основные данные с помощью UITableView.
Так что мне не хватает? И возможно ли использовать последний подход (что избавляет меня от многих ошибок кодирования и потенциальных неожиданных ошибок)? И, наконец, что лучший способ взять?
Я использую Xcode 5 и iOS 7, спасибо.
[обновлено]
Если бы я попытался добавить следующую строку в соответствии с предложением Almas в ответ ниже,
self.firstViewController = firstViewController;
я получил ошибку компиляции, поскольку firstViewController
не определен там.
И поэтому я добавил инициализацию firstViewController
, добавив следующую строку чуть выше указанной строки.
FirstViewController *firstViewController = [[FirstViewController alloc] init];
но тогда AppDelegate.m
выглядит как работает правильно, но на этот раз, произошла ошибка в viewDidLoad
способе FirstViewController.m
, который является таким же, как мой первый сообщил один.
Вы пытались использовать 'NSLog', чтобы увидеть, что значения' rootTabBarController', 'navigationController' и' firstViewController' в '- применение: didFinishLaunchingWithOptions: '? –
Да, я пробовал. Ни один из них не возвратил null - в конце концов, если какой-либо из них возвращает null, я не смог бы даже запустить симулятор правильно, верно? – Blaszard