#iphone #objective-c
#iPhone #objective-c
Вопрос:
Созданное мной приложение завершило работу с ошибкой при выполнении приведенных ниже строк кода, где c1 является целочисленной переменной.
NSString *path = c1.stringValue;
Показывает следующую ошибку в журнале:
-[NSCFString stringValue]: нераспознанный селектор, отправленный экземпляру 0x5566e80 2011-05-11 14:56:15.813 e-TREND[1552:207] Происходит неперехваченное исключение!! (Исключение NSInvalidArgumentException: -[NSCFString stringValue]: нераспознанный селектор, отправленный экземпляру 0x5566e80) 2011-05-11 14:56:15.816 e-TREND[1552:207] * Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘-[NSCFString stringValue]: нераспознанный селектор, отправленный экземпляру 0x5566e80’
если у кого-нибудь есть идеи по решению этой проблемы, пожалуйста, ответьте соответствующим образом.
Ответ №1:
где c1 — целочисленная переменная
Что это значит? Как объявлен c1?
Если бы c1
был int
, то c1.stringValue
даже не компилировался бы.
Синтаксис dot работает только тогда, когда ссылка на объект — c1
— имеет определенный тип ссылки на объект (не id
) и эта ссылка — этот класс — отвечает на метод.
Итак, у вас есть что-то вроде:
MyThingThatRespondsToStringValue *c1;
И затем вы где-то присваиваете экземпляр NSString
этой переменной, что приводит к сбою.
Ответ №2:
Пожалуйста, попробуйте это,
NSString *path = [NSString stringWithFormat:@"%@",c1];
Комментарии:
1. если
c1
была строка, зачем это делать?
Ответ №3:
Предположим, что C1 является экземпляром NSString
.
Попробуйте с
NSString *path = [NSString stringWithString:c1];
или
NSString *path = [[NSString alloc] initWithString:c1];
Комментарии:
1. Если бы
c1
был объявлен какNSString
, код операционной системы не компилировался.