Почему этот NSString, созданный из объекта NSData, не может показать, что у него есть содержимое?

Почему следующий код производит ведение журнала внизу? Вот аномалия - мой второй NSLog должен печатать chrStr, но ничего не производит, пусто, что подтверждается этой командой отладки:

(gdb) po chrStr

объект возвращает пустое описание

Однако третий NSString, где Я повторно конвертирую NSString обратно в объект NSData ДЕЙСТВИТЕЛЬНО отображает данные, то же значение, что и в первом NSLog, как и должно. Это указывало бы мне, что chrStr должно иметь фактическое содержимое. Но похоже, что это не так из NSLOG или команды po. Почему?


NSString *login;   
NSString *pass;


// Purpose: NSString *loginString = [NSString stringWithFormat:@"\000%@\000%@", login, pass];    
login = @"Loginname";       // text string1
pass = @"Password";         // text string2

// convert text strings to data objects
NSData *subData1 = [login dataUsingEncoding:NSUTF8StringEncoding];  
NSData *subData2 = [pass dataUsingEncoding:NSUTF8StringEncoding];   

// embed a NULL into new NSData object
NSMutableData *data = [NSMutableData data];
unsigned char zeroByte = 0;
[data appendBytes:&zeroByte length:1];

// append string1, NULL, string2 to data object
[data appendData:subData1];
[data appendBytes:&zeroByte length:1];
[data appendData:subData2];
NSLog(@"1.NSData:  %@", data);                  // print data object

// create a character string from data object
NSString *chrStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"2.NSString:  %@", chrStr);              // print character string

// create data object from string object
NSData *chrData = [chrStr dataUsingEncoding:NSUTF8StringEncoding]; 
NSLog(@"3.NSDATA:  %@", chrData);               // print data object

Производит: [1071: 207] 1.NSData: 004c6f67 696e6e61 6d650050 61737377 6f7264

[1071: 207] 2.NSString:

[1071: 207] 3.NSDATA: 004c6f67 696e6e61 6d650050 61737377 6f7264


Для меня это настоящая загадка. Если chrStr пусто, то 3-NSDATA не может отобразить свою информацию, но отображает!

Что я пытаюсь сделать? Что ж, проверьте мою самую первую строку комментария: // цель:

Эта строка при раскомментировании выдает предупреждение, даже если она действительно работает, поэтому я пытался сделать это другим способом, который позволил мне получить чистую компиляцию. Если вы видите лучший способ достичь этой цели, я обращаюсь ко мне глазами и ушами. Но, пожалуйста, не зацикливайтесь на том, зачем нужна эта строка @ "\ 000% @ \ 000% @", начните с признания, что это так. Спасибо.

5
задан ughoavgfhw 5 May 2011 в 18:20
поделиться