Wie konvertiere ich NSArray in NSData?


82

Kann mir jemand sagen, wie man ein NSArrayin ein konvertiert NSData? Ich habe eine NSArray. Ich muss es an eine senden NSInputStream. Dazu muss ich das NSArrayin ein konvertieren NSData.

Bitte helfen Sie mir, ich stecke hier fest.

Antworten:


190

Verwenden Sie NSKeyedArchiver (dies ist der letzte Satz der Post-Garrett-Links):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

Beachten Sie, dass alle Objekte in arraydem NSCodingProtokoll entsprechen müssen . Wenn es sich um benutzerdefinierte Objekte handelt, müssen Sie sich über das Codieren und Decodieren von Objekten informieren .

Beachten Sie, dass dadurch ein ziemlich schwer lesbares Eigenschaftenlistenformat erstellt wird, das jedoch eine Vielzahl von Objekten verarbeiten kann. Wenn Sie ein sehr einfaches Array haben (z. B. Zeichenfolgen), möchten Sie möglicherweise NSPropertyListSerialization verwenden, wodurch eine etwas einfachere Eigenschaftsliste erstellt wird:

NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];

Es gibt auch eine XML-Formatkonstante, die Sie übergeben können, wenn Sie möchten, dass sie auf dem Kabel lesbar ist.


93

In einem ähnlichen Zusammenhang würden Sie die NSData wie folgt zurück in ein NSArray konvertieren:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

5
Stellen Sie sicher, dass es sich um NSKeyedUnarchiver und nicht um NSKeyedArchiver handelt. Kann ein einfacher Fehler sein, wenn Sie die automatische Vervollständigung verwenden.
Sean

2
Diese Antwort sollte zusammen mit der von oben gewählten Antwort ausreichen, um kompatible Objekte zu / von NSData zu archivieren / zu archivieren
Scott D

3

Ich bin nicht sicher, ob dies Ihnen helfen wird, aber es ist ein Link für ein NSMutableArray zu NSData .


Vielen Dank für die schnelle Antwort, ich habe überprüft, dass vorher nicht viel geholfen hat.
Satish

3

Ich habe diesen Code verwendet.

 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];

1

Du kannst das-

NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];

1

In iOS 9+ verwenden Sie dies bitte:

NSArray *array = [[NSArray alloc] init];
NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];

Die ältere Version davon war in iOS 8 veraltet.


1

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.