2013-03-02 4 views
1

세 번째 NSData 객체 내에 저장하려는 두 개의 NSData 객체가 있습니다. 아이디어는 나중에 더 큰 객체를 해독 할 때 상대적인 크기 나 데이터 유형에 대해 걱정하지 않고 두 개의 작은 객체를 서로 독립적으로 얻으 려 할 때 쉽게 만들고 싶습니다.데이터를 손상시키지 않고 다른 NSData 내에 NSData 객체를 보관할 수 있습니까?

NSKeyedArchiver를 사용하여 큰 NSData 객체 내에 일종의 루트 수준 키 - 값 구조를 만드는 것이 가장 좋습니다. 두 개의 작은 객체를 별도의 키에 저장할 수 있습니다. 그게 내가 여기서 뭘하려고 한 내용은 다음과 같습니다

NSData *data1Before = [@"abcdefgh" dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *data2Before = [@"ijklmnop" dataUsingEncoding:NSUTF8StringEncoding]; 

NSMutableData *allData = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:allData]; 
[archiver encodeObject:data1Before forKey:@"key1"]; 
[archiver encodeObject:data2Before forKey:@"key2"]; 
[archiver finishEncoding]; 

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:allData]; 
NSData *data1After = [unarchiver decodeObjectForKey:@"key1"]; 
NSData *data2After = [unarchiver decodeObjectForKey:@"key2"]; 
[unarchiver finishDecoding]; 

NSString *string1After = [NSString stringWithUTF8String:[data1After bytes]]; 
NSString *string2After = [NSString stringWithUTF8String:[data2After bytes]]; 

NSLog(@"after1: %@",string1After); 
NSLog(@"after2: %@",string2After); 

NSLog statements- someetimes 특수 문자에서 오는 다른 결과의 모든 종류가 추가 얻을 당신이 반복이 코드를 실행하면, 당신이 얻을하는 문제 문자열의 끝, 때때로 그들은 단지 NULL입니다.

이 손상은 내가 사용하고있는 "이중 인코딩"프로세스와 관련이 있습니다. NSKeyedArchiver가 NSData 객체가 아닌 NSStrings에 직접 encodeObject를 호출하도록 코드를 수정할 때 나중에 decodeObjectForKey를 사용하여 아무 문제없이 해당 문자열에서 얻을 수 있습니다.

NSKeyedArchiver를 사용하는 것보다 더 효과적인 방법이 있습니까? 아니면 잘못 사용하고 있습니까? 이와

[NSString stringWithUTF8String:[data1After bytes]]; 

: 난 그냥이를 교체 할 필요 전술

+1

문자열을 데이터로 변환하는 이유는 무엇입니까? 원본 문자열을 보관하는 것이 가장 좋은 이유는 무엇입니까? 그러면 불필요한 전환을 많이 줄일 수 있습니다. – rmaddy

+1

아마도 :'[NSString stringWithUTF8String : [data1After bytes]];'는 다음과 같아야합니다 :'[[NSString alloc] initWithData : data1After encoding : NSUTF8StringEncoding];' – rmaddy

+0

@rmaddy # 1 : 모든 종류의 다른 데이터를 지원해야하기 때문에 문자열뿐만 아니라 NSData 객체 내에 설정합니다. # 2 : 좋습니다! 고쳐 줘서 고마워! 답변으로 게시하면 기꺼이 해결책으로 표시 할 것입니다. – todd412

답변

1

덕분에 그의 대답을 rmaddy하는

[[NSString alloc] initWithData:data1After encoding: NSUTF8StringEncoding]; 

을하고 그것을 해결했습니다.

+0

'NSString stringWithUTFString : ...'이 아니라면 - 머리카락을 꺼내는 누군가를 위해서 ... –