gpt4 book ai didi

ios - 在应用程序终止之前存储(持久化)结构数组的最有效方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:34 24 4
gpt4 key购买 nike

编程语言 - swift。

我创建了一个结构来存储与我的应用有关的所有相关信息,如下所示。此外,我正在创建一个 wordstruct 类型的数组,并用 3000 个条目填充它。

struct wordStruct{
var wordd:NSString
var meaning: [NSString]
var sentance: String
var syn: [String]
var seen:Int
var set: Int
var HF: Int
}

在尝试了我能想到的多种方法之后,我一直无法存储(持久化)数据(即结构数组)。我已经尝试过 NSUserDefault、Plist 和 NSCoding 方法(我可能做错了什么。)存储结构数组的最有效方法是什么?可以将数组写入文件吗?

最佳答案

结构体不能遵循 NSCoding,因为 NSCoding 是一个类协议(protocol)。如果您想使用 NSCoding 来持久化您的模型(这通常是最直接的方法),您必须将您的模型重新声明为符合 NSCoding 的 NSObject。

这是一个示例,说明如何根据您提供的代码段实现它:

class Word: NSObject, NSCoding {

var word: NSString!
var meaning: [NSString]!
var sentence: String!
var syn: [String]!
var seen:Int!
var set: Int!
var HF: Int!
// specify how your model will be decoded:
required convenience init(coder decoder: NSCoder) {
self.init()
self.word = decoder.decodeObjectForKey("word") as! String
self.meaning = decoder.decodeObjectForKey("meaning") as! [String]
self.sentence = decoder.decodeObjectForKey("sentence") as! String
self.syn = decoder.decodeObjectForKey("syn") as! [String]
self.seen = decoder.decodeIntegerForKey("seen")
self.set = decoder.decodeIntegerForKey("set")
self.HF = decoder.decodeIntegerForKey("HF")
}
// specify how your model will be encoded
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(word, forKey: "word")
coder.encodeObject(meaning, forKey: "meaning")
coder.encodeObject(sentence, forKey: "sentence")
coder.encodeObject(syn, forKey: "syn")
coder.encodeInteger(seen, forKey: "seen")
coder.encodeInteger(set, forKey: "set")
coder.encodeInteger(HF, forKey: "HF")
}
}

// an example word:
let example = Word()
example.word = "example"
example.meaning = ["abstractions", "generalizations", "use cases"]
example.sentence = "here is how you can implement NSCoding"
example.syn = ["what", "is", "a", "syn"]
example.seen = 1
example.set = 2
example.HF = 3

// persist the example to NSUserDefaults
let data = NSKeyedArchiver.archivedDataWithRootObject(example)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "example")

// load the saved example from NSUserDefaults
if let data = NSUserDefaults.standardUserDefaults().objectForKey("example") as? NSData {
if let example = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? Word {
example.meaning // ["abstractions", "generalizations", "use cases"]
example.set // 2
example.seen // 1
example.word // "example"
}
}

要进一步阅读,马特汤普森 (Matt Thompson) 在此处发表了一篇关于该主题的精彩文章: http://nshipster.com/nscoding/

阅读官方文档永远不会有坏处: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/index.html

关于ios - 在应用程序终止之前存储(持久化)结构数组的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643609/

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