Also ich dies mit ein paar Daten zu kodieren ...NSCoding in swift 3.0 mit Multipeer Übertragungsfehler
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
}
Es funktioniert, bon; so sende ich es über einen MultipeerConnectivity Link mit diesem ...
self.appDelegate.mpcHandler.session.sendResource(at: fileURL as URL, withName: fileSavedUnder, toPeer: self.appDelegate.mpcHandler.session.connectedPeers[0])
es Erhalten Sie auf dem anderen Host mit diesem ...
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")
}
}
Aber es nicht zu entschlüsseln ... ich etwas fehlt hier , ein kleines Detail ... Ich weiß, dass die Datei senden Link funktioniert; Ich habe bereits eine Textdatei gesendet und sie erhalten. Aber ich versuche, dies ist der richtige Weg zu codieren, diese Bibliothek NSCoding mit ...
Hier ist der NSCoding Code noch nicht ganz aufgegeben ...
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")
}
}