Czy ktoś może mi powiedzieć, jak przekonwertować an NSArray
na NSData
? Mam NSArray
. Muszę to wysłać do NSInputStream
. Aby to zrobić, muszę przekonwertować NSArray
plik na NSData
.
Proszę, pomóż mi, utknąłem tutaj.
Użyj NSKeyedArchiver (które jest ostatnim zdaniem linków postu Garretta):
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
Zauważ, że wszystkie obiekty w programie array
muszą być zgodne z NSCoding
protokołem. Jeśli są to obiekty niestandardowe, oznacza to, że musisz poczytać o obiektach kodowania i dekodowania .
Zauważ, że stworzy to dość trudny do odczytania format listy właściwości, ale może obsłużyć bardzo szeroki zakres obiektów. Jeśli masz bardzo prostą tablicę (na przykład ciągi znaków), możesz użyć NSPropertyListSerialization, która tworzy nieco prostszą listę właściwości:
NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
Istnieje również stała formatu XML, którą możesz przekazać, jeśli wolisz, aby była czytelna w sieci.
Z nieco pokrewnej notatki, oto jak przekonwertować NSData z powrotem na NSArray:
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Nie jestem pewien, czy to ci pomoże, ale jest to łącze do NSMutableArray do NSData .
źródło
Użyłem tego kodu.
NSError *error; NSMutableData *jsonData = [[NSJSONSerialization dataWithJSONObject:yourDemoArray options:0 // Pass 0 if you don't care about the readability of the generated string error:&error] copy];
źródło
Możesz to zrobić-
NSArray *array= [NSArray array]; NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
źródło
W iOS 9+ użyj tego:
NSArray *array = [[NSArray alloc] init]; NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
Starsza wersja tego rozwiązania została wycofana w iOS 8.
źródło
Szybki:
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray) print(data)
źródło