我已使用自定义init方法将NSMutableDictionary传递给FirstClass。
第二课,
firstClass = [[FirstClass alloc] initWithFeedData:feedDictionary];
[self.navigationController pushViewController:firstClasss animated:YES];
的Firstclass,
- (FirstClass *) initWithFeedData:(NSMutableDictionary *) dataDictionary {
{
NSLog(@"%@", dataDictionary);
[[NSBundle mainBundle] loadNibNamed:@"FirstClass" owner:self options:nil];
//[self viewDidLoad]; Without call, ViewDidLoad method doesn't call.
}
- (void) viewDidLoad {
[super viewDidLoad];
NSLOG(@"Inside View DidLoad"); // This method never calls.
}
在我的viewDidLoad方法中没有调用,如果我只调用“[self viewDidLoad]”,那么viewDidLoad方法可以正常工作。我不知道为什么viewDidLoad方法没有在没有其他方法的调用的情况下直接调用?请帮帮我。
感谢。
答案 0 :(得分:2)
如果你是UIViewController
的子类,我认为你是{期待viewDidLoad
,那么你应该覆盖它的指定初始化,initWithNibName:bundle:
如果你正在使用XIB,在这种情况下,{I}加载后将调用viewDidLoad
。如果您没有使用XIB,则应实施loadView
方法来创建视图,并在viewDidLoad
完成后调用loadView
。
答案 1 :(得分:1)
@Stephen是对的,至少你需要重写你的init语句来返回self
。但是,在视图控制器上声明属性并以这种方式传递对象会更容易,更健壮。
FirstClass *firstClass = [[FirstClass alloc] initWithNibNamed:nil];
firstClass.feedDictionary = feedDictionary;
[self.navigationController pushViewController:firstClasss animated:YES];
[firstClass release];
现在将调用viewDidLoad
方法,feedDictionary
将坐在那里,等着你。
答案 2 :(得分:0)
您的init
方法不正确。看起来应该是这样的:
- (id) initWithFeedData:(NSMutableDictionary *) dataDictionary {
if (self = [super init]) {
// TODO: do initialisation stuff with dataDictionary
}
return self;
}
这假设FirstClass
来自UIViewController
。
只要您的NIB文件与您的类名称相同,就应该自动加载 - 不需要loadBundle:
调用。以下是the documentation关于nibName
属性的说法:
如果此属性的值为nil 并且您没有覆盖loadView 自定义子类中的方法 视图控制器查找nib文件 谁的名字(没有.nib extension)匹配你的名字 查看控制器类。