【问题标题】:Trouble initializing NSViewController - UI Objects not retained初始化 NSViewController 时遇到问题 - UI 对象未保留
【发布时间】:2011-09-26 19:43:30
【问题描述】:

我在理解如何在 Mac 上使用 NSViewControllers 时遇到了一些问题。我正在尝试为 NSTableView 创建自定义表格单元格。在 NSTableView 的一个委托中,它可以返回一个视图,而不是一个单元格。

我有一个 NSViewController 的子类,并且在 .xib 中所有内容都正确链接,但是当我初始化 NSViewController 时,它的 UI 组件没有初始化……甚至没有它附带的默认视图。我已经尝试了一个干净的、库存的、未改动的 NSViewController 实现,只是为了确保问题不在于我正在做的事情。大概是这样。我正在初始化 NSViewController 如下:

testview *tmpChannel = [[testview alloc] initWithNibName:@"testview" bundle:nil];

.xib 确实存在,并且所有出口都正确链接。谁能解释这里发生了什么?我正在使用 xCode 4.1 和 Lion 操作系统

谢谢。

【问题讨论】:

  • 好的,我已经设法使用以下代码运行它:if (![NSBundle loadNibNamed:@"ChannelViewController" owner:tmpChannel]) { NSLog(@"Warning! Could not load myNib file.\n"); } 谁能解释为什么最初链接并加载了 xib?
  • 编辑:谁能解释为什么 xib 最初没有链接和加载?

标签: objective-c macos cocoa


【解决方案1】:

检查你的初始化
NSLog(@"%@", [tmpChannel description]);

根据您的代码,我假设您确实在此处获得了一个对象地址。这意味着错误可能在应该显示它的代码中。

顺便说一句,我建议使用大写的类名,例如TestView

编辑:

加载 xib 的附加信息:xib 文件的名称必须与类名完全相同。在这种情况下,您实际上可以完全省略 initWithNibName:bundle: 部分:

// xib file is "ViewController.xib"
// Class is defined as "ViewController"

ViewController *newController = [[ViewController alloc] init];  // this is enough

【讨论】:

  • 您好,我收到的输出是对象的类和内存地址 ()。至于讨厌的类名,我在创建类的时候有点着急……
  • 请同时检查“未初始化”的“UI 组件”。哪些组件?你是怎么检查的?
  • 好的,我已经设法使用以下代码运行它:if (![NSBundle loadNibNamed:@"ChannelViewController" owner:tmpChannel]) { NSLog(@"Warning! Could not load myNib file.\n"); } 谁能解释为什么 xib 最初是链接和加载的?
  • 编辑:谁能解释为什么 xib 最初没有链接和加载?
【解决方案2】:

IB (xib) 对象仅在视图实际加载后才被初始化。而不是在 initWithNibName:bundle:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多