gpt4 book ai didi

ios - SWIFT 如何创建一个 NSCoding 子类并从另一个类调用它?

转载 作者:可可西里 更新时间:2023-11-01 01:06:43 25 4
gpt4 key购买 nike

我在 NSCoding 上发现了这段黑色代码,它几乎就是我想要的。我找到它的链接在下面。如何在其他类中创建 NSCoding 类和用户?下面的代码无效。我希望有人可以帮助我解决这个问题。

import Foundation
import UIKit


class User: NSObject, NSCoding {
var name: String

init(name: String) {
self.name = name
}

required init(coder aDecoder: NSCoder) {

self.name = aDecoder.decodeObjectForKey("name") as String
}

func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "name")
}
}


//new class where I want to set and get the object

class MyNewClass: UIViewController {

let user = User(name: "Mike")
let encodedUser = NSKeyedArchiver.archivedDataWithRootObject(user)
let decodedUser = NSKeyedUnarchiver.unarchiveObjectWithData(encodedUser) as User

}

//http://stackoverflow.com/questions/24589933/nskeyedunarchiver-fails-to-decode-a-custom-object-in-swift

最佳答案

我正在从下面我自己的项目中剪切和粘贴。我已将其限制为一个字符串参数以存储到文件中。但是你可以有更多不同的类型。您可以将其粘贴到单个 swift 文件中,并将其用作 ViewController 以及添加的类以进行测试。它演示了使用 NSCoding 和 swift 语法在对象中保存和检索数据。

import UIKit
import Foundation

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

var instanceData = Data()
instanceData.name = "testName"
ArchiveData().saveData(nameData: instanceData)
let retrievedData = ArchiveData().retrieveData() as Data
println(retrievedData.name)

}
}

class Data: NSObject {

var name: String = ""

func encodeWithCoder(aCoder: NSCoder!) {
aCoder.encodeObject(name, forKey: "name")
}

init(coder aDecoder: NSCoder!) {
name = aDecoder.decodeObjectForKey("name") as String
}

override init() {
}
}

class ArchiveData:NSObject {

var documentDirectories:NSArray = []
var documentDirectory:String = ""
var path:String = ""

func saveData(#nameData: Data) {
documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
documentDirectory = documentDirectories.objectAtIndex(0) as String
path = documentDirectory.stringByAppendingPathComponent("data.archive")

if NSKeyedArchiver.archiveRootObject(nameData, toFile: path) {
//println("Success writing to file!")
} else {
println("Unable to write to file!")
}
}

func retrieveData() -> NSObject {
var dataToRetrieve = Data()
documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
documentDirectory = documentDirectories.objectAtIndex(0) as String
path = documentDirectory.stringByAppendingPathComponent("data.archive")
if let dataToRetrieve2 = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? Data {
dataToRetrieve = dataToRetrieve2 as Data
}
return(dataToRetrieve)
}
}

关于ios - SWIFT 如何创建一个 NSCoding 子类并从另一个类调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26086902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com