出于某种原因,我无法通过获取错误消息来调用initWithNibName
方法:“必须立即返回委托init调用的结果或将其分配给'self'”。这是一个ARC perk,因为没有指定nib名称,我无法初始化视图。
以下是.m
文件中的代码:
#import "SimpleMotionControllerIntroduction.h"
@implementation SimpleMotionControllerIntroduction
-(id) init
{
self = [super init];
if (self)
{
[self initWithNibName:@"SimpleMotionIntroductionView" bundle:nil];
}
return self;
}
@end
我觉得我正在做一些粗心的错误,之前我曾经使用iOS 5,并制作了一个类似于此的应用程序。提前谢谢。
答案 0 :(得分:6)
两个粗心的错误:你正在调用两个init方法(1)而忽略第二个方法的结果(2,触发错误信息)。
您永远不应该对一个对象进行两次init
次调用。请注意,initWithNibName
也会调用init
。我认为这实际上会导致无休止的递归并最终导致堆栈溢出。
答案 1 :(得分:4)
将其更改为:
self = [super initWithNibName:@"SimpleMotionIntroductionView" bundle:nil];
if (self)
{
//custom initialization
}
return self;
答案 2 :(得分:4)
如果您的裸-init
本身没有进行任何设置,只是推迟到另一个初始化程序,它应该如下所示:
-(id) init
{
return [self initWithNibName:@"SimpleMotionIntroductionView" bundle:nil];
}
就目前而言,你做错了两件事:丢弃initWithNibName:bundle:
的结果,然后重新初始化你的对象(因为initWithNibName:bundle:
本身会调用[super init]
) 。第一个是错误消息的原因。
一个类中只有一个初始值设定项应该调用 - 这是"designated initializer"。每个其他初始化程序都应该调用那个。