OGeek|极客世界-中国程序员成长平台

标题: ios - 核心数据替代品 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 02:28
标题: ios - 核心数据替代品

在使用 Core Data 定义我的模型时遇到了一些问题。

1.无法即时创建对象。

我希望能够创建如下所示的对象并继续为其属性添加值。

let action = Action()
action.desc = "hello"

但如果您使用的是 Core Data 模型类,则不能这样做,因为您会收到错误Failed to call specified initializer on NSManagedObject class。您必须使用 initWithEntity:insertIntoManagedObjectContext: 和所有创建一个新对象。

<强>2。不能在函数中使用类类型作为返回类型。

使用 Core Data 时,我保留一个单独的文件来放置所有获取/保存方法。在其中,我有一个用于检索所有 Action 对象作为数组的方法。

public func loadActions() -> [Action] {
    let fetchRequest = NSFetchRequest()
    let entityDescription = NSEntityDescription.entityForName("Action", inManagedObjectContext: managedObjectContext!)
    fetchRequest.entity = entityDescription

    var error: NSError?
    let result = managedObjectContext?.executeFetchRequest(fetchRequest, error: &error)

    return result!
}

我不能使用 Action 类型来创建类型化数组,因为我会收到错误 Method cannot be declared public 因为它的结果使用内部类型。所以我必须将数组作为 AnyObject 的数组,然后在我必须使用它们时将它们转换为 Action

3.类中不能有方法。

我知道您可以在 Objective-C 中创建类别并将所有方法放入其中。我猜 Swift 中的等价物是扩展(?)。但是,如果您可以将类及其方法完全放在同一个地方,那就太好了。

假设我走 OO 道路并以正常方式创建整个模型,这带来了我的问题。我可以如何以及在哪里保存这些对象?



Best Answer-推荐答案


这不是真正的答案,但我认为第 2 点和第 3 点无效?

  1. 不要公开你的方法——这里的问题与核心数据无关,而是与 Swift 的访问级别有关。您不能创建返回内部类型 Action 的公共(public)方法 loadActions。您必须将 Action 公开,或将方法设为内部(即删除单词 public)

  2. 你可以在类中拥有方法 - 只需将它们写在那里?而且即使你需要使用扩展名,你仍然可以将它放在同一个文件中吗?

PS 如果你确实找到了一个好的 Swift 替代品,请告诉我。我现在正在寻找一个 - 这就是我首先找到您的问题的方式!

关于ios - 核心数据替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175683/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4