Lon*_*Guy 5 cocoa cocoa-touch objective-c core-location nib
我不能使用initWithNibName:bundle see,因为我现在正在使用最新的XCode(5).经过一些研究,我找到了另一种选择:initWithCoder.
例:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self){
// code here
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我想要了解的是这是如何替代initWithNibName的?
目前正在学习ios的大书呆子牧场书,这本书是为ios6和之前版本的xode编写的,并试验了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;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是做什么的?它看起来像一个指定的初始值设定项,但参数的名称和返回类型让我感到困惑.欣赏会在这里有所帮助.
亲切的问候
更新:
从我在XCode 5中收集的内容中鼓励使用故事板,我没有看到不使用故事板的选项.我正在阅读本书的教程是使用XCode 4.3,其中可以使用nib.
为了理解此方法对于来自笔尖(或故事板)的视图控制器的影响,您必须了解NSCoding.
使用NSCoding取消归档对象时,您将获得它拥有的所有对象的级联效果.initWithCoder:被发送到一个对象,它被解冻,然后被发送到它拥有的对象等.
这是nib加载系统用于解冻您在界面构建器中创建的所有对象的内容.
以下是nib加载系统所做的快速概述(来自文档)
在此处查看对象加载过程部分下的更多详细信息. https://developer.apple.com/library/ios/documentation/cocoa/conceptual/LoadingResources/CocoaNibs/CocoaNibs.html
关键是当使用nib或storyboard时,将从viewController调用initWithCoder,因为这是系统解冻对象图的方式,以及您在界面构建器中对这些对象设置的属性.
还要记住,故事板只是一组nib文件,其中包含一些描述它们相关性的元数据.
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |