Frage Wie konvertiere ich NSArray in NSData?


Kann mir jemand sagen wie man ein umwandelt NSArray zu einem NSData? ich habe ein NSArray. Ich muss es an einen schicken NSInputStream. Um das zu tun, muss ich das konvertieren NSArray zu einem NSData.

Bitte hilf mir, ich stecke hier fest.


75
2017-08-17 04:56


Ursprung


Antworten:


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

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

Beachten Sie, dass alle Objekte in array muss dem entsprechen NSCoding Protokoll. Wenn dies benutzerdefinierte Objekte sind, bedeutet das, dass Sie sich informieren müssen Objekte kodieren und dekodieren.

Beachten Sie, dass dadurch ein ziemlich schwer lesbares Eigenschaftslistenformat erstellt wird, das jedoch sehr viele Objekte verarbeiten kann. Wenn Sie ein sehr einfaches Array (z. B. Strings) haben, können Sie 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-Format-Konstante, die Sie weitergeben können, wenn Sie lieber auf dem Draht lesen möchten.


186
2017-08-17 05:20



Hier ein paar Anmerkungen: So würden Sie die NSData zurück in ein NSArray konvertieren:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

92
2018-02-23 16:34



Ich bin mir nicht sicher, ob dir das helfen wird, aber es ist ein Link für eine NSMutableArray zu NSData.


3
2017-08-17 05:01



Du kannst das-

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

1
2018-02-12 11:57



Ich habe diesen Code benutzt.

 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
2018-01-07 13:53



Schnell:

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

1
2017-12-23 22:28



In iOS 9+ benutze dies bitte:

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

Die ältere Version war in iOS 8 veraltet.


0
2018-02-27 20:36