2009-08-17 140 views
75

誰能告訴我如何將NSArray轉換爲NSData?我有一個NSArray。我需要將它發送到NSInputStream。爲了做到這一點,我需要將NSArray轉換爲NSData。請幫助我,我被困在這裏。如何將NSArray轉換爲NSData?

回答

183

使用的NSKeyedArchiver(這是帖子的最後一句加勒特鏈接):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

注意,在array所有對象必須符合NSCoding協議。如果這些是自定義對象,那麼這意味着您需要閱讀Encoding and Decoding Objects

請注意,這將創建一個相當難讀的屬性列表格式,但可以處理非常廣泛的對象。如果你有一個非常簡單的數組(字符串實例),您可能需要使用NSPropertyListSerialization,它創建了一個有點簡單屬性列表:

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

還有一個XML格式常量可以傳遞如果你寧願它在電線上可讀。

+0

+1爲最佳答案,並非常感謝。 – Shivaay 2014-02-13 15:12:58

3

我不確定這是否會對您有所幫助,但它是NSMutableArray to NSData的鏈接。

+0

感謝您的快速回復,我已經檢查過,沒有太大的幫助。 – satish 2009-08-17 05:05:28

91

在一個有點相關的說明,這裏就是你將如何NSData的轉換回一個NSArray:

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

確保它是NSKeyedUnarchiver而不是NSKeyedArchiver。使用自動完成時可能是一個容易犯的錯誤。 – Sean 2013-11-05 16:58:16

+2

這個答案,加上從上面選擇的答案,應該足以將任何兼容對象存檔/取消存檔到/從NSData存檔 – 2014-11-05 18:08:25

1

你可以做到這 -

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

我用這個代碼。

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

在iOS系統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)