2012-08-08 71 views
0

我想如下從提取的NSKeyedArchiver一個NSString:提取的NSString從的NSKeyedArchiver

NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[coder encodeInt:1 forKey:@"myField"]; 
[coder finishEncoding]; 

NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", myString); 

問題是myString的是零(打印的NSLog '(空)')。上面的代碼有什麼問題?

我讀過的其他帖子提到這通常是由於編碼錯誤(即NSMutableData使用的編碼不同於UTF-8)。儘管我嘗試過所有不同類型的編碼,但仍然沒有運氣。

回答

-1

我看不到您在編碼字符串的位置。通常情況下,您將使用NSKeyedArchiver編碼NSString,然後使用NSKeyedUnarchiver將其解壓縮。它看起來並不像你理解這一切是如何工作的。我推薦閱讀關於archiving using Obj-C

+0

謝謝,我看了一下那個鏈接,它解釋瞭如何使用NSKeyedArchiver archiveRootObject:toFile:將編碼數據輸出到文件。但是,我想將對象的字符串表示代替爲NSString。根據文檔NSString initWithData:encoding:方法應該做的伎倆(即採取NSData並創建一個NSString)。 – Kyllan 2012-08-08 14:38:50

+0

你的最終目標是什麼? – FreeAsInBeer 2012-08-08 14:51:10

+0

只是爲了檢查我是否正確理解:我正在使用NSKeyedArchiver對「myField」鍵進行int編碼。 NSKeyedArchiver將編碼數據輸出到NSMutableData'data'。然後我使用'data'變量來初始化一個NSString。需要指定編碼,以便運行時知道如何將數據轉換爲字符串(即使用指定的字符串編碼,可能是UTF-8,ASCII或其他無數字符)。這聽起來正確嗎? – Kyllan 2012-08-08 14:51:58