我想將一些信息保存到視頻元數據中。現在我可以保存文本,即String
對象。是否可以將NSData(從NSKeyedArchiver獲得)作爲NSString保存,然後作爲NSData讀回?
// this works well
let metaItem = AVMutableMetadataItem()
metaItem.key = AVMetadataCommonKeySource as NSCopying & NSObjectProtocol
metaItem.keySpace = AVMetadataKeySpaceCommon
metaItem.value = String("some text") as! NSCopying & NSObjectProtocol
因此,而不是隻是String
我想序列化的自定義對象:
class ARTRMetadata: NSObject, NSCoding {
// ...
required init(coder aDecoder: NSCoder) {
//...
}
func encode(with aCoder: NSCoder) {
//...
}
}
我試圖Data
轉換爲String
,它墜毀,現在我stucked在寫入/讀取Data
到.txt
文件:
static func saveMetadataObjectAsText(memento: ARTRMetadata)->String {
let tempFilepath = NSTemporaryDirectory().appending("someFile2.txt")
FileManager.default.createFile(atPath: tempFilepath, contents: nil, attributes: nil)
if NSKeyedArchiver.archiveRootObject(memento, toFile: tempFilepath) {}
else { print("archiveRootObject toFile: FAILURE") }
do {
let contentsFeedToMetadataItem = try String(contentsOfFile: tempFilepath)
//let contentsFeedToMetadataItem = try String(contentsOfFile: tempFilepath, encoding: String.Encoding.utf8) // The file 「someFile2.txt」 couldn’t be opened using text encoding Unicode (UTF-8).
return contentsFeedToMetadataItem
}
catch { print(error) }
return "ERROR in contentsFeedToMetadataItem"
}
現在它崩潰,因爲「文件」someFile2.txt「無法打開因爲其內容的文本編碼無法確定。「
我想問題是從NSKeyedArchiver
獲得的NSData
無效NSString
。如果我是正確的,如何將數據轉儲爲文本?然後用相同的字節恢復它(對於NSKeyedUnarchiver
)?
提前致謝!
非常感謝!我會在星期一檢查它,然後會接受。 :) –