2009-08-17 44 views
75

誰もNSArrayをNSDataに変換する方法を教えていただけますか?私はNSArrayを持っています。私はそれをNSInputStreamに送る必要があります。これを行うには、NSArrayをNSDataに変換する必要があります。私を助けてください、私はここで立ち往生しています。NSArrayをNSDataに変換するには?

答えて

183

使用NSKeyedArchiver。これらがカスタムオブジェクトの場合は、Encoding and Decoding Objectsを読み上げる必要があります。

これは、読みにくいプロパティリスト形式を作成しますが、非常に広い範囲のオブジェクトを処理できることに注意してください。あなたは非常に単純な配列(例えば、文字列)をお持ちの場合は、少しシンプルなプロパティリストを作成するNSPropertyListSerializationを、使用することもできます。

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

あなたはそれではなくたい場合、あなたが渡すことができ、XML形式の定数もありますワイヤーで読むことができます。やや関連ノートで

+0

+1は最高の回答とありがとうございます。 – Shivaay

3

これが役立つかどうかはわかりませんが、NSMutableArray to NSDataのリンクです。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

array内のすべてのオブジェクトがNSCodingプロトコルに準拠している必要があります(ポストの最後の文ギャレットリンクです)

+0

感謝を私はdidntの助けの前に多くを確認しました。 – satish

91

は、ここにあなたが戻ったNSArrayへのNSDataを変換します方法は次のとおりです。

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data] 
+5

NSKeyedArchiverではなくNSKeyedUnarchiverであることを確認してください。自動完了を使用すると簡単に間違えることがあります。 – Sean

+2

上記の選択された回答と相まって、この回答はNSDataとの互換性のあるオブジェクトをアーカイブ/アーカイブ解除するのに十分なはずです –

1

あなたが、私はこのコードを使用しthis-

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

を行うことができます。 iOS版で

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

9+これをしてください使用します

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

をこれの古いバージョンがスウィフトのiOS 8に

0

を廃止されました。迅速な応答を

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray) 
print(data) 
関連する問題