2016-09-22 9 views
1

Поэтому я использую это для кодирования некоторых данных ...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") 
} 
} 

ответ

1

Итак, я сохранил в файл с этим ...

func save2file() -> String { 
    let directory = NSTemporaryDirectory() 
    let fileName = NSUUID().uuidString 
    let fileURL = directory.appending(fileName) 

    var bytesWritten = 0 
    if let outputStream = OutputStream(toFileAtPath: fileURL, append: true) { 
     outputStream.open() 
     for blah in fnDB { 
      let string2write = String(format: "%@,%@,%d\n", blah.fnLink , blah.fnName, blah.fnPos) 
      print(string2write) 
      outputStream.write(string2write,maxLength: string2write.lengthOfBytes(using: String.Encoding.utf8)) 
      bytesWritten = bytesWritten + string2write.lengthOfBytes(using: String.Encoding.utf8) 
     } 
     outputStream.close() 
     } 
    return fileURL 
    } 

перетекает ... и читать его обратно с этим ...

do { 
     let fullText = try String(contentsOf: localURL) 
     let lines = fullText.components(separatedBy: "\n") as Array 
     for blah in lines { 
      let field = blah.components(separatedBy: ",") as Array 
      if field.count == 3 { 
        sharedDataAccess.fnATV(fnName: field[1], fnLink: field[0], fnPos: Int(field[2])!) 
      } 
      sharedDataAccess.sorterPos() 
      sharedDataAccess.dump() 
     } 
    } catch { 
     print("fcuk2209 conversion failed") 
    } 

и это было гораздо меньше, болезненный, чем NSCoding ... :)

 Смежные вопросы

  • Нет связанных вопросов^_^