我不能使用 initWithNibName:bundle,因为我现在使用的是最新的 XCode (5)。经过一番研究,我找到了一个替代方案:initWithCoder。
例子:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self){
// code here
}
return self;
}
我想了解的是这是如何替代 initWithNibName 的?
目前正在学习一本为 ios6 和以前版本的 xode 编写的 ios 书,并尝试使用 coreLocation 框架。
在下面的代码中,我替换了 initWithNibName。我也在早期的教程中使用相同的初始化程序完成了此操作,并且它有效,但是如果我不完全理解一章,我将无法继续阅读教程书籍。苹果文档并不总是立即有意义。通常,stackoverflow 的答案和重新阅读相结合可以帮助您深入了解。
- (id)initWithCoder:(NSCoder *)aDecoder
{
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 it location immediately
[locationManager startUpdatingLocation];
}
return self;
}
上面的代码在做什么?它看起来像一个指定的初始化器,但参数的名称和返回类型让我感到困惑。会感谢一些帮助。
亲切的问候
更新:
从我在 XCode 5 中收集的内容来看,鼓励使用故事板,我看不到不使用故事板的选项。我从本书中学习的教程使用的是 XCode 4.3,其中 nib 可用。