StringWithFormat, возвращающий не-NSString

У меня проблема с StringWithFormat не работает. Отладчик говорит, что возвращаемая строка не является NSString (и не нулевой), поэтому мои вызовы с предполагаемым NSString не будут соответствовать селектору метода, и мое приложение аварийно завершает работу.

Я тестирую настройки XCode 4.5 iOS 6 (старый проект, без подпроектов).

Этот код вернет что-то, что не является NSString:

[NSString stringWithFormat:@"\nTest to %@ (%@)\n", target, ipString]

Если я вставлю пробел в качестве первого символа в строку формата, результатом будет NSString, т.е. работает следующее:

[NSString stringWithFormat:@"\nTest to %@ (%@)\n", target, ipString]

Этот кодовый блок тоже не работает. Он возвращает что-то не NSString. Что я здесь делаю неправильно?

int TTL = 1;
NSString *ttl = [NSString stringWithFormat:@" \n# %d", TTL] ;
TTL++;
[self textToParent:  ttl];     // Program crashes here. Debugger show ttl not NSString.
TTL--;

Сообщение об ошибке: ttl = (__NSCFString *) 0xwhatever @<variable is not NSString>


person povlhp    schedule 03.10.2012    source источник
comment
ошибка в отладчике при отображении переменной: ttl = (__NSCFString *) 0xwhatever @‹variable is not NSString›   -  person povlhp    schedule 03.10.2012
comment
Я протестировал ваш код с помощью Xcode 4.5 с iOS6 на реальном устройстве, он работает хорошо, в журнале указано, что результат # 1. твоя проблема должна быть где-то в другом месте, а не здесь. какой класс self? а что внутри метода -textToParent:?   -  person holex    schedule 03.10.2012


Ответы (3)


Попробуйте изменить первые две строки на ..

  int TTL = 1;
        NSString *ttl = [NSString stringWithFormat:@" \n# %@",[NSNumber numberWithInt:TTL] ] ;

   TTL++;
   [self textToParent: (NSString *) ttl];     //  Change here.
   TTL--;
person AppleDelegate    schedule 03.10.2012
comment
Сейчас я все больше запутался, позже попытаюсь воссоздать проект. - person povlhp; 03.10.2012
comment
попробуйте привести его к такому виду [self textToParent: (NSString *) ttl]; - person AppleDelegate; 03.10.2012
comment
Я перешел с LVVM на отладчик GDB, и все выглядит намного лучше. Теперь, похоже, у меня другая проблема. Даже после приведения типов к NSString * мои вызовы textToParent, кажется, терпят неудачу, даже те, которые раньше работали. - person povlhp; 03.10.2012
comment
Похоже, моя переменная self была уничтожена, она указывает на обнуленную копию моего подкласса NSThread. Раньше в треде работало. Итак, вопрос в том, почему он потерял содержимое? АРК? Вызов сохранения на себя в качестве первого шага в моей теме не помог. - person povlhp; 03.10.2012
comment
Моя проблема заключалась в том, что при манипулировании структурами C (сетевыми буферами низкого уровня) я превышал размер пакета и, таким образом, убивал переменную self. Именно это и вызвало все проблемы. - person povlhp; 03.10.2012

попробуйте следующий код...

int TTL = 1;
NSString *ttl = [NSString stringWithFormat:@" \n# %@",[NSNumber numberWithInt:TTL]] ;
[ttl retain];
TTL++;
[self textToParent:  ttl];
TTL--;

надеюсь, это поможет вам...

:)

person Paras Joshi    schedule 03.10.2012
comment
ошибка в отладчике при отображении переменной: ttl = (__NSCFString *) 0xwhatever @‹variable is not NSString› - person povlhp; 03.10.2012
comment
NSLog(@\n\n ttl = %@,ttl); вставьте эту строку после [ttl keep] и посмотрите, выдает ли она вывод или нет.. если выдаете вывод, то опубликуйте весь метод textToParent с возвращаемым типом - person Paras Joshi; 03.10.2012

Учтите, что ваш отладчик может быть не совсем совершенным. Нажмите на переменную в отладчике, щелкните правой кнопкой мыши «распечатать описание».

person gnasher729    schedule 03.04.2014