NSArray를 NSData로 변환하는 방법?


82

사람이 어떻게 변환하는 방법을 말해 줄래 NSArrayNSData? 나는 NSArray. 나는 그것을 NSInputStream. 위해 나는 변환 할 필요가해야 할 일 NSArrayNSData.

제발 도와주세요, 여기 갇혀 있어요.

답변:


190

NSKeyedArchiver (Garrett 게시물 링크의 마지막 문장)를 사용하십시오.

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

의 모든 개체 arrayNSCoding프로토콜을 준수해야 합니다. 이것이 사용자 정의 개체 인 경우 Encoding and Decoding Objects 를 읽어야 함을 의미합니다 .

이렇게하면 읽기 어려운 속성 목록 형식이 생성되지만 매우 광범위한 개체를 처리 할 수 ​​있습니다. 매우 간단한 배열 (예 : 문자열)이있는 경우 NSPropertyListSerialization을 사용하여 좀 더 간단한 속성 목록을 생성 할 수 있습니다.

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

유선에서 읽을 수 있기를 원한다면 전달할 수있는 XML 형식 상수도 있습니다.


93

약간 관련된 메모에서 NSData를 다시 NSArray로 변환하는 방법은 다음과 같습니다.

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

5
NSKeyedArchiver가 아닌 NSKeyedUnarchiver인지 확인하십시오. 자동 완성을 사용할 때 쉽게 실수 할 수 있습니다.

2
이 답변은 위에서 선택한 답변과 결합되어 NSData와 호환되는 개체를 보관 / 보관 해제하기에 충분해야합니다
Scott D


3

이 코드를 사용했습니다.

 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

넌 할 수있어-

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

1

iOS 9 이상에서는 다음을 사용하십시오.

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

이전 버전은 iOS 8에서 더 이상 사용되지 않습니다.


1

빠른 :

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.