2013-09-24 1 views
0

У меня есть проблема. Я вызываю метод в другом классе. Я называю это раньше, и он отлично работает, но я перезвонить в другом методе ближе к концу класса и у меня есть эта ошибка:iOS Исключение было выбрано: непризнанный селектор отправлен в экземпляр

-(void)methodOne:(NSString*)myString 
{ 
    mySecondClasss *second = [[mySecondClasss init] autorelease]; 
    [second doSomething:myString]; 
    /* 
    more code 
    */ 
} 

-(void)methodTwo:(NSString*)myString 
{ 
    mySecondClasss *second = [[mySecondClasss init] autorelease]; 
    [second doSomething:myString]; 
    /* 
    more code 
    */ 
} 

Во втором я получаю эту ошибку:

Исключение было throw: - [mySecondClasss doSomething:]: непризнанный селектор, отправленный в экземпляр. Я не понимаю, почему работает один раз, но не во второй раз. Любой из вас может дать мне несколько указаний, как я могу это исправить?

Я по-настоящему благодарю вашу помощь.

+0

Ваш вопрос не ясен. В чем разница между methodOne и методомTwo? Как вы их называете? Кроме того, у вас должно быть выделение перед вашим init, это опечатка? Код, который вы отправили, даже не компилируется. – rdelmar

+0

Согласен с rdelmar. Дополнительная информация о том, где вы называете эти методы, будет полезна. – Unheilig

+0

Ошибка явно указывает, что класс 'mySecondClasss' не имеет метода с именем' doSomething: '. Показать файл .h для 'mySecondClasss'. – rmaddy

ответ

2

С IOS 5 у вас есть ARC (автоматический подсчет ссылок), который автоматически освобождает объект правильно. В любом случае вы не выделяете память для класса mySecondClasss. Не уверен, почему он даже работал в первом методе.

Вместо использования

mySecondClasss *second = [[mySecondClasss init] autorelease]; 

Попробуйте использовать

mySecondClasss *second = [[mySecondClasss alloc] init]; 
+0

Вызов '[[mySecondClasss init] autorelease]' явно неверен, но это также означает, что OP не использует ARC. Код даже не компилируется с ARC. – rmaddy

+0

Вам необходимо выделить память перед созданием класса с ARC или без него. По всей вероятности, первый вызов работал, потому что он накладывал существующую часть вашей программы, второй вызов провалился, потому что second = nil. Проверьте это при отладке. – Paulo

-3

Вы уверены, что вы отправляете строку в функцию? Ошибка подразумевает, что функция не получает строку.

Например:

[self methodOne:@"Properly formatted string"]; 
+1

Ошибка не имеет абсолютно никакого отношения к тому, как вызывается метод methodOne: 'или' methodTwo: '. Это означает, что в классе 'mySecondClasss' нет такого метода, как' doSomething: '. – rmaddy

 Смежные вопросы

  • Нет связанных вопросов^_^