我有一些课程:A,B,C及其说明:
class A {
var index: int = 0
init(){}
}
class B {
var a1 : A?
var a2 : A?
var relation : int?
init(){}
}
class C {
var vA : [A] = []
var vB : [B] = []
int(){
}
}
//在主程序中,通过
设置C的数据var c : C = C()
let a1 : A = A()
a1. index = 1
let a2 : A = A()
a2.index = 2
let b : B = B()
b.a1 = a1
b.a2 = a2
b.releation = 1
c.vA.append(a1)
c.vA.append(a2)
c.vB.append(b)
现在我想将'c'的数据存储到文件中,并在下次从该文件中再次返回。那是什么解决方案?写和读文件或任何建议!
我尝试使用 NSKeyedArchiver 归档数据,然后 NSKeyedUnArchiver 再次取消归档数据,但是,当检查文件始终为“找不到文件”时,和'总是返回NIL'
var c1 = c
let dataArchive : Data = Data(bytes: &c1, count: MemoryLayout<C>.stride)
let randomFilename = UUID().uuidString
let data = NSKeyedArchiver.archivedData(withRootObject: dataArchive)
let fullPath = getDocumentsDirectory().appendingPathComponent(randomFilename)
do {
try data.write(to: fullPath)
} catch {
print("Couldn't write file")
}
let filemgr = FileManager.default
if filemgr.fileExists(atPath: fullPath.absoluteString) {
print("File exists")
} else {
print("File not found")
}
//
var dataArchiveLoaded : Data?
let x = NSKeyedUnarchiver.unarchiveObject(withFile: fullPath.absoluteString)
print(x) //ALWAYS return NIL
答案 0 :(得分:0)
如果您使用的是Swift 4,那么在完成后,您始终可以使您的班级文件符合Codable
,您可以使用JSONEncoder
和JSONDecoder
对其进行编码和解码对象分别。然后可以将编码数据保存到文件中。如果你更愿意看到一些代码,请告诉我:)。