super init返回nil

时间:2015-04-21 11:18:12

标签: ios objective-c xcode

我有这种情况,我只是调用类I的init使这个类成为NSObject的子类。

- (instancetype)initArray
{
    self = [super init];

    if (self) {
      //Do Some Logic
    }
return self;
}

这是来自App Delegate的电话

    CategoryLoader *categoryLoader = [[CategoryLoader alloc]initArray];

让我疯狂的是:

  • 虽然它返回nil但它会进入if条件
  • 在其他计算机上使用其他Xcode
  • 并不返回nil

请注意,Xcode都是6.3

我试过的解决方案:

  • 清除Xcode的缓存
  • 删除了课程并创建了一个新课程
  • 重新安装Xcode

以下是发生了什么的屏幕截图:

Screenshot

任何建议为什么它可以从NSObject返回nil,我接下来该怎么办?

谢谢

2 个答案:

答案 0 :(得分:1)

NSObject init的实施永远不会返回nil。这在NSObject Class Reference中有记载:尽管有些令人困惑,但关键部分是

  

NSObject类中定义的init方法不进行初始化;它只是回归自我。

如果您正在观察它重新调整nil,则无法设置某些内容(可能该类不是NSObject的直接子类),或者您以某种方式错误地解释结果,或者在另一个层面上出现了问题。您在不同的计算机上观察到不同结果的事实表明它可能处于另一个级别,如Xcode,操作系统或硬件。我在那里帮不了多少;尝试重新启动。

此外,您的方法应该命名为init而不是initArray。这不是一项要求,而是一项非常强有力的惯例。您可以阅读Object Initialization in Apple’s Concepts in Objective-C Programming

答案 1 :(得分:1)

确定。那是问题所在:

该计划处于发布模式。在这种情况下,监视窗口在大多数对象中显示为nil。当我在NSLog上打印self的值时,它打印了它的值。我和另一个Xcode之间唯一的区别就是这个方案。

因此解决方案是编辑要调试的项目方案。

感谢您的支持