我点击表格中的一行并转到新视图,在viewdidload中我将nav.title放入网址并发送到php页面。然而,url是在nav.title初始化之前发送的,所以我从php接收null。我如何确保在viewdidload之前初始化nav.title,或者有人能想出更好的方法来构造这段代码吗?感谢
答案 0 :(得分:1)
viewDidLoad
方法位于UIViewController
。我觉得使用视图控制器很棘手的是有时你会在代码中实例化它们,有时你会从NIB文件中实例化它们。
这两个实例化路径不共享正确初始化的常用方法。所以我已经付诸实践,总是使用这样的模式实现我的所有UIViewController
子类:
- (void)primitiveInit {
// Here I setup all my instance variables.
}
// Designated initializer for instantiating in code.
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
self = [super initWithNibName:nibName bundle:nibBundle];
if (self) {
[self primitiveInit];
}
return self;
}
// Always called when instantiated from NIB.
- (void)awakeFromNib {
[super awakeFromNib];
[self primitiveInit];
}
通过这种方式,我可以始终信任primitiveInit
在我的视图控制器上调用它们,然后才能在屏幕上显示,并接收任何外部事件。
我所做的实际上是我在NSObject
上添加了一个类别,该类别从根类primitiveInit
方法和根类init
调用awakeFromNib
方法。这样我只需要在任何类中实现primitiveInit
,而不关心它们是如何实例化的。但这稍微提高了一些,解释它的工作原理是一个独立的话题。
@implementation NSObject (CWPrimitiveInit)
+ (void)load {
Method m1 = class_getInstanceMethod(self, @selector(init));
Method m2 = class_getInstanceMethod(self, @selector(cw_init));
method_exchangeImplementations(m1, m2);
m1 = class_getInstanceMethod(self, @selector(awakeFromNib));
m2 = class_getInstanceMethod(self, @selector(cw_awakeFromNib));
method_exchangeImplementations(m1, m2);
}
- (void)primitiveInit {
}
- (id)cw_init {
self = [self cw_init];
[self primitiveInit];
return self;
}
- (void)cw_awakeFromNib {
[self cw_awakeFromNib];
[self primitiveInit];
}
@end
答案 1 :(得分:0)
我没有在应用程序中获取php的经验。但我会尝试不使用nav.title的当前内容设置URL的内容。您可以尝试在新视图打开之前执行此操作。
我希望这会有所帮助......再见