1

我有一個NSMutableArray創建存儲歌曲名稱和藝術家。我試圖將此數組轉換爲NSData格式,以便我可以將其保存到文本文件。如果試圖這樣做,輸出我得到的是不可讀:NSMutableArray NSData到.txt文件 - 輸出不可讀

bplist00ÔghX$ versionX $ objectsY $ archiverT $頂部†¯$ 「) -/3459:;!@ AEFGKLMQRSWXY]^_銅$nullÒ R $ 0〜 。V $類€€#Ò ZNS.objectsª€€€ € ...等

我使用的是從一個NSMutableArray到NSData的轉換代碼是:

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)發出的內容。還有一種XML格式,可以通過NSPropertyListSerialization訪問,儘管沒有人使用XML格式存檔數據,因爲實際的plist表示形式是實現細節。

所以,儘管這是一個不可讀的二進制數據塊,但它仍然會對您想要的進行編碼,您可以使用NSKeyedUnarchiver再次對其進行解碼。

+0

預期的輸出是:songName artist –

+0

是否可以將數據從數組傳輸到NSData對象而不進行歸檔?我只是試圖從數組中獲取可讀的數據到文本文件中。對於我的生活,我不能讓它工作。 –

+0

@NicholasVogler:當然。但這完全取決於您希望輸出的外觀。如果你唯一的目標是「讓它人類可讀」,那麼你可以構造一個包含與你的類相同信息的NSDictionary *對象的NSArray *對象,並使用'NSPropertyListSerialization'輸出一個XML plist。在你的對象和'NSDictionary'之間轉換更多的工作,但這樣你可以得到一個XML plist。 –

0

如果數組中的所有對象都是字符串(或包含字符串的字典),在我看來,將它保存爲JSON會更有意義。