1

NSMutableArray에 노래 이름과 아티스트가 저장되어 있습니다. 이 배열을 NSData 형식으로 변환하여 텍스트 파일에 저장할 수 있도록 노력하고 있습니다. 그렇게 할 때, 내가 얻을 출력은 읽을 수 없습니다 :NSMutableArray에서 NSData to .txt 파일 - 읽을 수없는 출력

bplist00ÔghX $ versionX $ objectsY $ archiverT $ 위로 † ¯ $ ") -/3459 :;!. @ AEFGKLMQRSWXY]^_ CU $ nullÒ R $을 0 . V의 $ 클래스 €€ # 오 ZNS.objectsª €€€ € ... 등

내가있는 NSData에있는 NSMutableArray에서 변환 사용하고 코드는 다음과 같습니다

NSFileManager *fm; 

NSData *dataCache = [NSKeyedArchiver archivedDataWithRootObject:myList]; 

fm = [NSFileManager defaultManager]; 

if ([fm createFileAtPath:@"https://stackoverflow.com/users/nicholasvogler/desktop/Mysongs.txt" contents:dataCache attributes:nil] == NO) 

    { 
     NSLog (@"Could not create data file"); 
     return 1; 
    } 

모든 객체 배열에있는 NSStrings 및 문자열 및 배열에 대해 다음 메서드를 추가했습니다 :

-(void) encodeWithCoder:(NSCoder *)encoder 
{ 

    [encoder encodeObject: songname]; 
    [encoder encodeObject: artist]; 
} 

답변

4

정확히 출력을 기대합니까? 당신이 가지고있는 것은 바이너리 plist입니다. 이것이 보관 된 데이터 (예 : NSKeyedArchiver)가 방출하는 데이터입니다. 실제로 plist 표현은 구현 세부 사항이므로 아무도 XML 형식을 사용하여 아카이브 된 데이터를 사용하지는 않지만 NSPropertyListSerialization을 통해 액세스 할 수있는 XML 형식이 있습니다.

그래서 당신이 읽을 수없는 바이너리 BLOB인데도 여전히 원하는 것을 인코딩하고, NSKeyedUnarchiver으로 다시 디코딩 할 수 있습니다.

+0

예상되는 출력은 songName 아티스트 –

+0

배열의 데이터를 보관하지 않고 NSData 객체로 전송할 수 있습니까? 텍스트 파일에서 읽을 수있는 배열의 데이터를 가져 오려고합니다. 나에게있어서 나는 그것을 작동시킬 수 없다. –

+0

@NicholasVogler : 물론입니다. 하지만 그것은 출력을 어떻게 보이게 할 것인가에 전적으로 달려 있습니다. 만약 당신이 유일한 목표는 "인간이 읽을 수있게 만드는 것"이라면 클래스와 같은 정보를 담고있는'NSDictionary * '객체의 NSArray *를 만들고'NSPropertyListSerialization'을 사용하여 XML plist를 출력 할 수 있습니다. 그것은 당신의 객체와'NSDictionary' 사이를 변환하는 더 많은 작업입니다, 그러나 당신은 XML plist를 얻을 수 있습니다. –

0

배열의 모든 객체가 문자열 (또는 문자열이 포함 된 사전) 인 경우 JSON으로 저장하는 것이 더 적합하다고 생각됩니다.