【问题标题】:cocoa class init doesn't run可可类初始化不运行
【发布时间】:2012-10-26 04:55:28
【问题描述】:

在一个简单的测试应用程序中,它会启动并打开一个窗口,但永远不会到达类中的 init。调试器控制台位于:Running… (gdb)

UntitledAppDelegate.m 或 .h 中没有任何内容

在一个 NSObject 类中,“untitled”init 在 untitled.h 中声明,在 untitled.m 中我有

 @implementation untitled
   - (id)init {

    if (self = [super init])
    { 
       int i=1;
       i=i++;
       NSLog(@"%i here",i);
    }

    return self;
  }

 @end

UntitledAppDelegate.m 中的断点表明它到达了最后一个 }。

Xcode 设置为 3.2、OSX 10.6 和垃圾回收。

没有错误或警告;它运行。,

为什么 init 不运行,我该如何解决?

【问题讨论】:

  • 显示初始化无标题类的代码。
  • @rishi at 符号必须被删除才能添加评论 - #import interface untitled : NSObject { } - (id)init ;结束

标签: objective-c cocoa init


【解决方案1】:

你曾经为那个类的任何实例调用过 init 吗? 在你的代码中你应该有的地方:

untitled *myObj = [[untitled alloc] init];

如果不是,那么这就是它没有被调用的原因。

【讨论】:

  • 我正在学习 Hillegas 的书和 Wentk 的书中的示例,他们在其中创建了一个类并包含一个 -(id)init。 init 在启动时运行,没有任何编程消息发送给它。这在我创建命令行工具(无窗口)时成功,但在我创建 Cocoa 应用程序(有窗口)时没有成功。似乎窗口打开阻止了启动初始化。断点显示 untitledAppDelegate 运行,但从未到达 init。顺便说一句,当存在修改后的 init 时,[alloc init] 会产生很多问题。
【解决方案2】:

我向所有浪费时间查看我的愚蠢错误结果的人道歉。
几个结合在一起,但主要是我意识到这些作者使用的是带有 initWithFrame 的 NSView 类,它在启动时运行就像它应该在没有添加到 UntitledAppDelegate 的情况下一样。

我还没有弄清楚为什么 NSObject 类中的简单初始化不会在启动时运行。

- (id)init {  
if (self = [super init]) {  
NSLog(@"Foo");  
}  
return self;  
}

【讨论】:

【解决方案3】:
untitled *object = [untitled new];

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多