在关于指定初始化程序UIViewControllers
的initWithCoder
的previous post之后,我还有另一个关于传递到协议方法中的参数aDecoder
的问题。
这是有问题的代码:
@implementation WhereamiViewController
- (id)initWithCoder:(NSCoder *)aDecoder //we're overiding the superclasses (UIViewController) inititalizer
{
self = [super initWithCoder:aDecoder];
if (self){
//create location manager object
locationManager = [[CLLocationManager alloc] init];
//there will be a warning from this line of code
[locationManager setDelegate:self];
//and we want it to be as accurate as possible
//regardless of how much time/power it takes
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
//tell our manager to start looking for its location immediately
[locationManager startUpdatingLocation];
}
return self;
}
我对aDecoder感到好奇,因此将其重命名以查看我的代码是否仍然可以正常工作。我想知道的是究竟将什么作为参数传递给initWithCoder?似乎我的代码中什么都没有。参数是否只是方法的一部分,即使没有传递任何内容也必须显示?其他时候我创建了指定的初始化程序,我这样做是这样的:
self = [super init]
init是NSObjects指定的初始化程序吗?
这是我不理解的代码的唯一部分。我看到我正在调用我的 super class 初始化程序,然后使用其他自定义代码实现它/使其具有selfs(whereamiviewcontroller)值。
我确实设置了一个标记,并查看了日志,看是否有什么可以引起我的注意,但是没有运气。
提前致谢
问候
最佳答案
当您尝试从笔尖或情节提要中初始化视图控制器实例时,可以看到-initWithCoder:
方法正在起作用。在这种情况下,Cocoa Touch将使用UINibDecoder
初始化程序使用-initWithCoder:
实例从xml中解码控制器元素。