Почему мой IBOutlet выпущен под ARC?

Проблема

IBOutlet выпущен до того, как у меня появится возможность его использовать.

Что я хочу

Я хочу получить доступ к контроллеру навигации из своего делегата приложения, чтобы я мог перезагрузить представление таблицы.

Моя настройка

У меня есть:

  • Main.xib, который установлен в качестве моего основного интерфейса в целевых настройках
  • IBOutlet для контроллера навигации в качестве ivar на моем делете приложения
  • Этот IBOutlet подключается к правильному контроллеру навигации в Main.xib
  • App Delegate создается в xib, но не задан как владелец файла

Я использую ARC, Xcode 4.3.2 и iOS5.1

Что я пробовал

  • Изменение цели развертывания
  • Помещение точки останова на dealloc для контроллера навигации, делегата приложения – они никогда не вызываются
  • Чтение всего, что я могу найти на ARC и IBOutlets – ничто не противоречит тому, что я делаю
  • Создание нового проекта с минимальными требуемыми классами – я вижу точно такую ​​же проблему

Код

KPAppDelegate.h

@interface KPAppDelegate : UIResponder <UIApplicationDelegate> { IBOutlet KPBrowseExpensesNavigationController *nc; } @property (strong) IBOutlet KPBrowseExpensesNavigationController *nc; 

KPAppDelegate.m

 @implementation KPAppDelegate @synthesize nc; -(void)setNc:(KPBrowseExpensesNavigationController *)nc_ { nc = nc_; // This gets called on view load and nc gets set. } ...snip... // This is called about 5 seconds after app startup -(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { // By the time we get here, nc is nil. UITableViewController *tvc = [[nc viewControllers] objectAtIndex:0]; [[tvc tableView] reloadData]; } @end 

ОБНОВИТЬ

Я должен делать что-то действительно глупо здесь. Даже невероятно простой проект все еще показывает эту проблему. См. Ссылку ниже.

Загрузите простой тестовый проект, который показывает проблему.

4 Solutions collect form web for “Почему мой IBOutlet выпущен под ARC?”

В Window nib установите класс FileOwner как UIApplication, а затем укажите его делегат из Outlets в объект AppDelegate. Это то, что неправильно в вашем примере проекта.

ваш выход из интерфейса Builder установлен как тип KPBrowseExpensesNavigationController ? Если нет, это не приведет к созданию соединения между вашим nib и ViewController.

Вы должны установить свой пользовательский класс как KPBrowseExpensesNavigationController в Identity Inspector

Я не уверен, почему вы объявляете его как свойство и не-свойство. Я должен сделать что-то вроде этого:

 @interface KPAppDelegate : UIResponder <UIApplicationDelegate> @property (nonatomic, strong) IBOutlet KPBrowseExpensesNavigationController *nc; 

И в вашей реализации:

 @implementation KPAppDelegate @synthesize nc = _nc; // So you don't accidentally use nc ...snip... // This is called about 5 seconds after app startup -(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { // By the time we get here, nc is nil. UITableViewController *tvc = [[**self.nc** viewControllers] objectAtIndex:0]; [[tvc tableView] reloadData]; } @end 

Надеюсь это поможет!

Я не видел, где вы назначаете свой контроллер nav. Просто объявление свойства не будет присваивать ему какое-либо значение, поэтому оно будет равно нулю. В вас -didFinishLaunchingWithOptions в -didFinishLaunchingWithOptions приложения установите оператор alloc / init. Все остальное выглядит хорошо.

 KPBrowseExpensesNavigationController *nc = [[KPBrowseExpensesNavigationController alloc] init]; 

Если у вас есть пользовательский init, вы также можете использовать его, но просто убедитесь, что настроили его, прежде чем пытаться его использовать.

  • Список шрифтов, которые можно использовать с методом labelNodeWithFontNamed от SpriteKit
  • Изменение цвета текста кнопки, не отражающего
  • Внедрение интерфейсов жестов в стиле страницы в стиле iOS
  • Создание popover на iPhone?
  • Как создать структуру C в свойство класса?
  • GCD dispatch_async и NSURLConnection
  • iOS - Где инициализировать представления
  • Как сделать эффект виньетки на iOS?
  • Как предотвратить UINavigationBar от блокировки касаний на просмотр
  • Core Plot: следует добавить CPTPlotSpaceAnnotation для построения графика, чтобы весь график был перерисован?
  • Звук локального уведомления cordova не работает в ios и andorid
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.