2014-10-01 141 views
1

我想存儲我的RTF文本UITextView的NSAttributedString。對於這個在stackoverflow的問題建議,我選擇NSData。問題是應用程序崩潰,而解壓縮和檢索的數據也與保存的NSData不同。存儲和檢索NSAttributedString

說明 DB: 將數據保存到數據庫

在DB我有一個名爲rtfText與數據類型BLOB列 - >(rtfText BLOB) 雖然保存到數據庫,我做這

NSData *data = [NSKeyedArchiver archiveWithRootObject:_myTextView.attributedString]; 

併發送這樣的數據在查詢

NSString Query = [NSString stringWithFormat:@"Insert into table (rtfText) VALUES \"%@\")",data]; 

檢索數據從DB

數據被檢索這樣的:

NSData *data = [[NSData alloc] initWithBytes:(sqlite3_column_blob(statement, 18)) length:sqlite3_column_bytes(statement, 18)]; 

取消存檔:

從從DB檢索到的NSData我取消存檔成NSAttributedString像這

_myTextView.attributedText = [NSKeyedUnarchiver unarchiveObjectWithData:data]; **<- App Crashes at this point giving error** 

錯誤: - [__ NSCFData objectForKey:]:無法識別的選擇發送到實例0x15d56e80

我甚至想NSAttributedString保存到NSData的後存檔然後使用NSASCIIStringEncoding轉換成的NSString但DB崩潰然後。我也試着像這樣保存它。首先使用NSKeyedArchiver將NSAttributedString轉換爲NSData,然後使用NSUTF8StringEncoding將其轉換爲NSString,這給了我空字符串。

請注意這一點。

在此先感謝

回答

1

數據決不正確插入到數據庫中。原因是sqlite3上的查詢總是以UTF8的形式出現。必須將NSString轉換爲UTF-8才能進行查詢。在這個轉換後,數據庫中的NSData被完全改變,即通過UTF-8再次編碼。

當我檢索到數據時,它與舊的不一樣。因此在解壓縮時出現錯誤。

解決方案:存儲NSData的成sqlite3的而不轉換爲UTF-8,並用於sqlite_bind_blob用於存儲BLOB數據到數據庫SQLITE3。