не удается инициализировать объект класса-Objective C

#objective-c

#objective-c

Вопрос:

Мне нужно вызвать метод, который был определен в том же классе.Я вызываю метод initiateSession из функции A.

 -(BOOL)intitiateSession
{
 //stmts
 return YES;
}
-(BOOL)A
{
 if([self initiateSession])
 {
  //stmts
 }
 return YES;
}
  

получение ошибки времени выполнения как,

Завершение работы приложения из-за неперехваченного исключения

не удается инициализировать объект класса

ОТРЕДАКТИРОВАНО:

 @implementation Data
-(BOOL)initiateSession
{
NSLog(@"I am into the initiateSession!!");
return YES;
}
-(BOOL)getNHPData{
        NSLog(@"In getNHPData!!");
        if([self initiateSession])
                   {
                       NSLog(@"I am into the session");
                   }
     return YES;
}
@end
  

Здесь, в цикле if, я вызову функцию.Выполните функцию, и если функция

выполняется с значением true, я попадаю внутрь области видимости.Я не смог вызвать одну функцию из

другая функция.

Комментарии:

1. пожалуйста, опубликуйте свои полные методы

2. Единственное место, которое вы должны вызывать, self = [super init] находится внутри вашего init метода.

3. @Терри Уилкокс: Вы правы. Как мне вызвать функцию из другой функции, которая определена в том же классе? Я получаю исключения во время выполнения при попытке выполнения вышеуказанных вызовов.

Ответ №1:

getNHPData() не является инициализатором и не должен вызываться [super init] . Это то, что вы бы вызвали из своего собственного инициализатора. Ваш написанный код даже не будет компилироваться (ваша @implementation строка неверна). В приведенном выше коде вы, безусловно, получаете много предупреждений, к которым вам следует прислушаться (в одном случае вы возвращаетесь self из метода BOOL, а в другом случае их нет return ). Ваша фактическая ошибка предполагает, что вы делаете что-то вроде, [Data getNHPData] что не является законным, поскольку getNHPData является методом экземпляра. Вы также должны получать предупреждения об этом.

Сначала очистите все свои предупреждения. Это, вероятно, поможет вам двигаться в правильном направлении. В Cocoadevcentral есть краткое введение ко всем проблемам, с которыми вы сталкиваетесь.

Комментарии:

1. Я отладил ошибки, как вы указали здесь. Спасибо, что помогли мне понять ошибки, которые я допустил в своем коде. Вчера я 3 часа ломал голову. Сегодня в течение 10 минут я смог устранить все свои ошибки и предупреждения. Большое спасибо.

Ответ №2:

Вам нужно вызвать [super init] при перезаписи -(id) init .

Смотрите #3 и # 6 здесь.

Ответ №3:

Всегда выполняйте super init вызов, когда вы переопределяете init в своем классе.