Поэтому я использую это для кодирования некоторых данных ...NSCoding в быстром 3.0 с ошибкой передачи Multipeer
func save2fileV3() -> String {
var newDBstrip:[Book] = []
for blah in fnDB {
let newDBrec = Book(name: blah.fnName, link: blah.fnLink, age: blah.fnPos)
newDBstrip.append(newDBrec)
}
let directory = NSTemporaryDirectory()
let fileName = NSUUID().uuidString
let fileURL = directory.appending(fileName)
NSKeyedArchiver.archiveRootObject(newDBstrip, toFile: fileURL)
guard let encodedBook = NSKeyedUnarchiver.unarchiveObject(withFile: fileURL) as? [Book] else { return "" }
encodedBook.forEach({print($0.fileName, $0.fileLink, $0.filePos)})
return fileURL
}
Он работает, бон; поэтому я отправить его по ссылке MultipeerConnectivity с этим ...
self.appDelegate.mpcHandler.session.sendResource(at: fileURL as URL, withName: fileSavedUnder, toPeer: self.appDelegate.mpcHandler.session.connectedPeers[0])
Получить его на другой хост с этим ...
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?) {
print("File finished \(localURL)")
do {
let localFS = try String(contentsOf: localURL)
let encodedBook = NSKeyedUnarchiver.unarchiveObject(withFile: localFS) as? [Book]
encodedBook.forEach({print($0.fileName, $0.fileLink, $0.filePos)})
} catch {
print("conversion failed")
}
}
Но он не декодирует ... Я-то здесь отсутствует , небольшая деталь ... Я знаю, что ссылка на файл отправки работает; Я уже отправил простой текстовый файл и получил его. Но я стараюсь, чтобы закодировать это правильный путь, используя эту библиотеку NSCoding ...
Вот NSCoding код не совсем отказались еще ...
class Book: NSObject, NSCoding {
let fileName: String
let fileLink: String
let filePos: String
required init(name: String, link: String, age: String) {
self.fileName = name
self.fileLink = link
self.filePos = age
}
required init(coder decoder: NSCoder) {
self.fileName = decoder.decodeObject(forKey: "fileName") as? String ?? ""
self.fileLink = decoder.decodeObject(forKey: "fileLink") as? String ?? ""
self.filePos = decoder.decodeObject(forKey: "filePos") as? String ?? ""
}
func encode(with coder: NSCoder) {
coder.encode(fileName, forKey: "fileName")
coder.encode(fileLink, forKey: "fileLink")
coder.encode(filePos, forKey: "filePos")
}
}