gpt4 book ai didi

ios - 读/写数据 NSCoding iOS - Singelton 与否?

转载 作者:行者123 更新时间:2023-11-29 01:39:44 25 4
gpt4 key购买 nike

这个问题已经被问过很多次了,但我仍然处于十字路口。

我的应用程序需要保存数据,可以通过应用程序的许多区域访问这些数据。

我想避免使用核心数据,因为它对于我需要保存 3-4 个简单的不同类来说太过分了。

所以我正在使用 NSCoding,它的工作没有问题。

我并没有纠结于什么是访问这些存储数据的“最佳”方式。

本质上,无论是否是单例。阅读了各种帖子,大多数人都说避免使用单例。

这个问题变得很明显,因为我当前的设计使用单例对象为我提供了一种轻松地从光盘访问数据的方法。问题是测试......找不到克服无法测试的方法 - 这是我决定问我是否应该使用这种模式的时候。

那么,访问我的数据的更好方法是什么 - 允许从应用程序中的任何位置进行读写。

使用单例,只是不要测试 - 或创建一个新实例,并要求该实例检索我的数据。我也不想传递数据 - 我希望能够轻松访问数据 - 读取和写入(使用选项卡栏 Controller 等)

这是我的单例实现

class InvalidClientCollection {

static var errorList = InvalidClientCollection.loadErrataClients()
static private let kErrataClientSaveFileName = "errorClientsFile"

static var clientCount:Int {
get {
return errorList.count
}
}

static func loadErrataClients() -> [Client] {

let mysavefile = FilePath(fileName: kErrataClientSaveFileName).filePath
if let data = NSKeyedUnarchiver.unarchiveObjectWithFile(mysavefile) as? [Client] {
return data
}
return [Client]()
}

static func saveErrataClientList() {
let mysavefile = FilePath(fileName: kErrataClientSaveFileName).filePath
NSKeyedArchiver.archiveRootObject(errorList, toFile: mysavefile)
}
}

我是否应该重新设计,以便获取我的数据

let mycolleection = InvalidClientCollection()
let mystuff = mycollection.errorList

我猜是这样的?

class InvalidClientCollection {

var errorList:[Client] {
get {
return loadErrataClients()
}
set {
self.errorList = newValue
// maybe even save at same time
//saveErrataClientList()
}
}
// etc...
}

任何想法 - 改进的代码将不胜感激。

最佳答案

是的,为此避免单例是一个好计划。一个简单的解决方案是创建数据类的单个实例,并将引用作为属性保留在应用程序委托(delegate)中。从任何类访问应用程序委托(delegate)都很容易。然后从那里您可以访问该属性。这消除了单例并使测试更容易。

另一种选择是将所需的数据实例传递给应用程序中的每个 View Controller 。这样做的好处是不假设应用程序只需要一个数据实例。这可以通过将数据实例传递给 Root View Controller 在应用程序委托(delegate)中启动。然后根 Controller 可以将它传递给它呈现或推送的任何 View Controller ,等等。通过子类化 UIViewController 并让所有 View Controller 扩展您的基类,这会变得更容易。 UIViewController 类别甚至更好。

关于ios - 读/写数据 NSCoding iOS - Singelton 与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32544439/

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