#iphone #objective-c #cocoa-touch
#iPhone #objective-c #cocoa-touch
Вопрос:
Я расширяю шаблон Apple для отложенной загрузки изображения таблицы. Я хотел бы, чтобы следующий код выполнялся при создании RootViewController.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillEnterForeground:)
name:UIApplicationWillEnterForegroundNotification
object: nil];
Проблема в том, что я не знаю, как сконструирован RootViewController. Я попробовал следующие два метода, но они так и не были выполнены. Я ввел NSLog
эти методы, и они так и не были распечатаны.
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
- (id)init
Я открыл MainWindow.xib и заметил, что он загружает RootViewController как IBOutlet в UIApplicationDelegate
. Итак, RootViewController является подклассом UIViewController
. Итак, вопрос сводится к «как сконструирован IBOutlet UIViewController?»
Ответ №1:
Вы можете выполнить код, который вам нужно выполнить, в методе awakeFromNib, он вызывается декодером после создания выхода.
Комментарии:
1. Можете ли вы объяснить, почему
-(id)init
, как определено в NSObject, не выполнялось? RootViewController -> UITableViewController -> UIViewController -> NSResponder -> NSObject.2. В файле NIB хранятся сериализованные объекты. Когда вы загружаете файл nib, они десериализуются, а не создаются, поэтому методы инициализации не вызываются.
3. вот почему у вас есть awakeFromNib, так что вам не нужно беспокоиться =)
4. Я понятия не имею, как добавить
awakeFromNib
в мойUIViewController
. Я импортировалNSNibLoading.h
, потому что именно там он определен. И я добавилNSNibAwaking
к списку протоколов. В обеих добавленных мною строках говорилось то-то и то-то, что не было определено. Согласно документам,awakeFromNib
поступает изAppKit.framework
. Я даже не смог найти этот фреймворк в списке существующих фреймворков. Я полностью потерян.5. awakeFromNib добавляется в NSObject, все, что вам нужно сделать, это добавить метод
-(void)awakeFromNib
в ваш RootViewController, и он будет вызван.