我是否正确地说 initWithNibName:bundle 用于手动加载 nib 文件,而 initWithCoder 将用作替代方案?

2024-04-06

我无法使用 initWithNibName:bundle 因为我现在使用的是最新的 XCode (5)。经过一番研究,我找到了一个替代方案:initWithCoder。

Example:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];

    if (self){
       // code here
    }

    return self;
}

我想了解的是,这是如何替代 initWithNibName 的?

目前正在学习一本针对 ios 的书呆子牧场书籍,该书是为 ios 6 和以前版本的 xcode 编写的,并正在尝试 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;
}

上面的代码是做什么的?它看起来像一个指定的初始值设定项,但参数的名称和返回类型让我感到困惑。感谢这里的一些帮助。

亲切的问候

Update:

根据我在 XCode 5 中收集的信息,鼓励使用故事板,并且我没有看到不使用故事板的选项。我在本书中遵循的教程使用的是可使用笔尖的 XCode 4.3。


NSCoding https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Protocols/NSCoding_Protocol/Reference/Reference.html https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Protocols/NSCoding_Protocol/Reference/Reference.html

为了了解此方法对于笔尖(或情节提要)中的视图控制器的作用,您必须了解 NSCoding。

当使用 NSCoding 取消归档对象时,您会获得其拥有的所有对象的级联效果。 initWithCoder:被发送到一个对象,它被解冻,然后被发送到它拥有的对象等。

这是笔尖加载系统用来解冻您在界面构建器中创建的所有对象的方法。

这是笔尖加载系统的功能的快速概述(来自文档)

  1. nib文件和引用的资源被加载到内存中
  2. nib 中创建的对象图是未归档的(NSCoding),这实际上取决于对象的类型。 UIViews 被发送 initWithFrame,UIViewControllers 被发送 initWithcoder 因为它们符合 NSCoding所有其他对象都只是发送 init。
  3. 所有出口和操作连接(您的 IBOUtlet 和 IBActions)均分别使用 setValue:forKey: 和 setTarget:action: 建立。
  4. 然后 awakeFromNib 被发送到 nib 中的所有对象

请在此处查看对象加载过程部分下的更多详细信息。https://developer.apple.com/library/ios/documentation/cocoa/conceptual/LoadingResources/CocoaNibs/CocoaNibs.html https://developer.apple.com/library/ios/documentation/cocoa/conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

要点是,当使用 nib 或 Storyboard 时,将从 viewController 调用 initWithCoder,因为这就是系统解冻对象图以及在界面生成器中在这些对象上设置的属性的方式。

另请记住,故事板只是 nib 文件的集合,其中包含一些描述它们之间关系的元数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我是否正确地说 initWithNibName:bundle 用于手动加载 nib 文件,而 initWithCoder 将用作替代方案? 的相关文章

  • 使用 Interface Builder 创建的自定义视图在其他视图中调用时不会呈现

    我有一个用于主窗口的 xib 并通过以下步骤创建了一个自定义视图 创建一个新类 继承自NSView MyView h import
  • 无法按住 CTRL+拖动 NSButton 到自定义 NSView 标题

    我想创建一个自定义的NSTableCellView由 Interface Builder 实例化 我已将 Table Cell View 类设置为MyTableCellView 并正确创建MyTableCellView NSTableCel
  • 如何为图层阴影不透明度设置动画?

    我有一个视图 我已将 LayerOpacity 设置为 1 theView layer shadowOpacity 1 0 当视图位于屏幕下方时 这看起来很好 当我将此视图向上移动以与另一个有阴影的视图齐平时 它们看起来不太好 有没有办法让
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • 访问 google reader 的 Endpoints API 时出错

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • iPhone Twitter SDK 与 iOS 5 设备的集成问题

    我已成功将 Twitter Sharekit 与我的 iPad 应用程序源集成 当我在模拟器和装有 iOS 4 X 的 iPad 1 上测试该应用程序时 它运行完美 并且成功发布了推文 但是 如果我在装有 iOS 5 的 iPad 2 上安
  • 如何清除代码中的 NSLog 输出?

    有没有办法清除代码中的控制台输出 thanks 我喜欢的快捷方式 Simply USE K Keyboard Shortcut when you want to clear the NSLOG Data
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 为什么 Objective-C 方法名称的最后一部分必须带有参数(当有多个部分时)?

    在 Objective C 中 您不能声明最后一个组件不带参数的方法名称 例如 以下内容是非法的 void take id theMoney andRun void take id yourMedicine andDontComplain
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • 如何从 AFNetworking 和 AFJSONRequestOperation 获取可变字典?

    我将 JSONKit 与 AFNetworking 的 AFHTTPClient 带有 AFJSONRequestOperation 一起使用 我似乎无法弄清楚如何触发使用 JSONKit 的 mutableObjectFrom 方法 而不
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • 如何解决 CoreData mogenerator 未找到问题

    我收到如下所示的错误 我不知道我错过了什么 我该如何解决这个问题 如下图所示 Users nischalhada Documents XcodePro mnepalnews revisited 2 0 CoreData mogenerato
  • 确定 Objective-C 方法在运行时是否是可变的

    有没有办法在运行时找出给定方法是否是可变参数类型 就像是method getTypeEncoding 这不会告诉我一个方法是否接受可变数量的参数 或者有什么技巧可以告诉我们吗 罗伯特的评论是正确的 考虑 interface Boogity

随机推荐