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.

satish
quelle

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.

Rob Napier
quelle
93

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

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Michael Thiel
quelle
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 .

Garrett
quelle
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];
Avijit Nagare
quelle
1

Du kannst das-

NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
Nitesh
quelle
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.

NeilNie
quelle
1

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
ioopl
quelle