2012-10-16 11 views
5

Oto kod, który próbowałem przekonwertować NSData na NSString, ale program zwraca "Program otrzymał sygnał: SIGABRT".Konwersja obiektu NSData na NSString

NSString *string= [NSString stringWithUTF8String:[data bytes]]; 

LUB

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

Czy istnieje jakiś inny lepszy sposób to zrobić?

+0

Czy Twój 'data' zmienna zero? –

+4

A jeśli nie jest zerowy, czy faktycznie zawiera bajty ciągu znaków w kodowaniu UTF-8? Jak powstał obiekt NSData? – rmaddy

+1

@rmaddy Gdyby to skutkowało nieokreślonym wynikiem ciągu (prawie na pewno tylko zerowym zwrotem), nie dałoby to SIGABRT na tej linii. –

Odpowiedz

7

Here's a highly up-voted answer pokazuje, jak to zrobić. W skrócie:

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

Pierwszy pomysł wygląda jak nie z powodu wysyłania [data bytes]. stringWithUTF8String nie jest przygotowany na void *. Drugi pomysł wygląda tak, jakby działał, nawet przy zerowej ilości danych wejściowych.

0

Swift-3

enter image description here

let ciąg = data.base64EncodedString()

+0

w swoim pośpiechu, aby zrobić komentarz "ooh, in swift ...", możesz przeczytać aktualne pytanie OP – eric