2009-08-18 3 views
0

Я преобразовываю данные (с веб-страницы) в строку). Основной код работает (но там было какое-то незначительное изменение - возможно, на сервере)."Invalid" iphone string

NSLog показывает ожидаемую строку (возможно, 1000 символов). Однако, когда я плаваю над responseString, он показывает «Недопустимый». Хуже того, разбор с компонентамиSeparatedByCharactersInSet не работает.

Идеи?

NSString *responseString; 
responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
NSLog([NSString stringWithFormat:@"responsestring ='%@'",responseString]); 
if ([responseString compare:@""] != NSOrderedSame) { 
    lines = [responseString componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@";"]]; 
+0

Просто обратите внимание, что вы можете использовать equalsTo: вместо сравнения: сравнить строки. Тогда вам не нужно приравнивать его к NSOrderedSame. – rein

+0

повод - спасибо за наконечник. Пошел с isEqual. – BankStrong

+0

Кроме того, вашему NSLog не нужно иметь материал stringWithFormat. На самом деле это было бы плохо. NSLog (@ "responseString = '% @'", responseString) будет делать то, что вы хотите, поскольку оно автоматически имеет форматирование. (Причина, по которой это плохо, заключается в том, что responseString, если он имеет% в нем, может привести к сбою, поскольку вы могли бы проходить в @ "responseString = 'Некоторое случайное значение с% в нем" – AlBlue

ответ

2

Это может произойти, если для конфигурации установлено значение «Отпустить», а не «Отладка».

0

Не доверять тому, что говорит отладчик, это не является точным, это случилось со мной, и мне потребовалось некоторое время, чтобы понять, что Xcode отладчик не всегда прав и не следует доверять, так что больше я не доверять отладчику, и я использую инструкции nslog всякий раз, когда он пытается сказать мне, что что-то недействительно. Поэтому не беспокойтесь об этом, и когда это случилось со мной, я также разбирал ответы от некоторого веб-сервиса.

+0

Dead on. Я вернулся и понял, что я установил версию «release». Отладчик должен предоставить разные значения, такие как «unknown - using release version», если он не может определить значение. – BankStrong

0

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

Ваш вопрос и комментарии ниже показывают, что вы думаете, что «Invalid» является фактическим строковым значением - но уверены ли вы, что у вас нет просто управления памятью?

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