«Результат вызова инициализации делегата должен быть немедленно возвращен или назначен на« себя »» при вызове initWithNibName - PullRequest
2 голосов
/ 26 февраля 2012

По какой-то причине я не могу вызвать метод initWithNibName с получением сообщения об ошибке: «Результат вызова инициализации делегата должен быть немедленно возвращен или назначен на« self »».Это какой-то перк ARC, потому что без указания имени пера я не могу инициализировать представление.

Вот мой код в файле .m:

#import "SimpleMotionControllerIntroduction.h"

@implementation SimpleMotionControllerIntroduction

-(id) init
{
    self = [super init];

    if (self)
    {
        [self initWithNibName:@"SimpleMotionIntroductionView" bundle:nil];
    }

    return self;
}

@end

Я чувствую, чтоЯ делаю какую-то неосторожную ошибку, раньше работал с iOS 5 и создал такое же приложение, которое работало так же.Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 26 февраля 2012

Две неосторожные ошибки: вы вызываете два метода init (1) и игнорируете результат второго (2, вызывает сообщение об ошибке).

У вас никогда не должно быть двух init вызовов дляодин объект.Обратите внимание, что initWithNibName также вызывает init.Я думаю, что это на самом деле приведет к бесконечной рекурсии и в конечном итоге к переполнению стека.

4 голосов
/ 26 февраля 2012

Если ваш голый -init не выполняет никаких настроек, а просто переносит их на другой инициализатор, он должен выглядеть следующим образом:

-(id) init
{
    return [self initWithNibName:@"SimpleMotionIntroductionView" bundle:nil];
}

В нынешнем виде вы делаете две вещи неправильно: отбрасываете результат initWithNibName:bundle: и повторно инициализируете свой объект (потому что initWithNibName:bundle: сама вызовет до [super init]). Первая причина сообщения об ошибке.

Только один инициализатор в классе должен вызывать - это «назначенный инициализатор» . Любой другой инициализатор должен обращаться к этому.

4 голосов
/ 26 февраля 2012

Измените его на:

 self = [super initWithNibName:@"SimpleMotionIntroductionView" bundle:nil];

 if (self)
 {
      //custom initialization
 }

 return self;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...