2016-07-29 4 views
1

Hier ist ein NSCoding-konformes Objekt. Ich möchte es aus dem Dokumentenverzeichnis der App in Swift 3 speichern und wiederherstellen. Ich kann mir vorstellen, dass es sich um eine Sicherungsmethode und eine Wiederherstellungsmethode handelt. Wie wird das gemacht?So verwenden Sie persistent & rufen Sie ein NSCoding-kompatibles Objekt zur App Document-Verzeichnis in Swift 3 auf?

import Foundation 

class Book: NSObject, NSCoding { 
    var title: String 
    var author: String 
    var pageCount: Int 
    var categories: [String] 
    var available: Bool 

    init(title:String, author: String, pageCount:Int, categories:[String],available:Bool) { 
     self.title = title 
     self.author = author 
     self.pageCount = pageCount 
     self.categories = categories 
     self.available = available 
    } 

    // MARK: NSCoding 
    required convenience init?(coder: NSCoder) { 

     let title = coder.decodeObject(forKey: "title") as! String 
     let author = coder.decodeObject(forKey: "author")as! String 
     let categories = coder.decodeObject(forKey: "categories") as! [String] 
     let available = coder.decodeBool(forKey: "available") 
     let pageCount = coder.decodeInteger(forKey: "pageCount") 

     self.init(title:title, author:author,pageCount:pageCount,categories: categories,available:available) 
    } 

    func encode(with: NSCoder) { 
     with.encode(self.title, forKey: "title") 
     with.encode(self.author, forKey: "author") 
     with.encode(Int32(self.pageCount), forKey: "pageCount") 
     with.encode(self.categories, forKey: "categories") 
     with.encode(self.available, forKey: "available") 
    } 
} 

Vielen Dank!

+0

'NSKeyedArchiver' /' NSKeyedUnarchiver' – dan

+0

Ich verstehe, dass Sie NSKeyedArchiver/NSKeyedUnarchiver verwenden, aber ich verstehe nicht, wie ein Verweis auf das Verzeichnis docs bekommen und den Code zu speichern. Ich bin den ganzen Nachmittag in der Dokumentation und im Internet herumgesprungen. – Aaronium112

Antwort

1

Ersparnis:

// Get documents directory 
if let docs = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { 

    // Append your file name to the directory path 
    let path = (docs as NSString).appendingPathComponent("filename") 

    // Archive your object to a file at that path 
    NSKeyedArchiver.archiveRootObject(yourObject, toFile: path) 
} 

Laden:

// Get documents directory 
if let docs = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { 

    // Append your file name to the directory path 
    let path = (docs as NSString).appendingPathComponent("filename") 

    // Unarchive your object from the file 
    let yourObject = NSKeyedUnarchiver.unarchiveObject(withFile: path) as? Book 

    // do whatever with yourObject 
} 
1

Hier ist das gleiche Design guard-Anweisungen.

import UIKit 
import MediaPlayer 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let book = Book(title: "Atlas Shrugged", author: "Ayn Rand", pageCount: 10, categories: ["Ethics"], available: true) 
     save(object: book, filename: "Bookshelf") 

     let atlasShrugged = retrieve(filename: "Bookshelf") as! Book 
     print("\(atlasShrugged.title) by \(atlasShrugged.author)") 
    } 

    func save(object:NSObject ,filename:String){ 

     //build filepath in doc directory 
     guard let docs = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return } 
     let path = (docs as NSString).appendingPathComponent(filename) 

     //save object to path in docs 
     NSKeyedArchiver.archiveRootObject(object, toFile: path) 
    } 

    func retrieve(filename:String) -> AnyObject? { 

     // Get documents directory 
     guard let docs = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return nil } 
     //build path to file 
     let path = (docs as NSString).appendingPathComponent(filename) 
     //Unarchive from doc directory 
     let object = NSKeyedUnarchiver.unarchiveObject(withFile: path) as? Book 
     return object 
    } 
Verwandte Themen