#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
в своем классе.