核心数据替代方案

时间:2014-10-03 08:28:39

标签: ios class oop core-data model

使用Core Data定义我的模型时,我遇到了一些障碍。

1。无法即时创建对象。

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

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

但是如果您正在使用Core Data模型类,则无法执行此操作,因为您将收到错误无法在NSManagedObject类上调用指定的初始化程序。您必须使用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创建类型化数组,因为我收到错误方法无法公开,因为其结果使用内部类型。所以我必须将数组作为AnyObject的数组,然后每当我必须使用它们时将它们转换为Action

第3。在课堂上不能有方法。

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

假设我采用OO道路并以正常方式创建我的整个模型,这就引出了我的问题。我如何以及在哪里保存这些物品?

1 个答案:

答案 0 :(得分:0)

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

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

  2. 你可以在课堂上使用这些方法 - 只需将它们写在那里?即使您需要使用扩展程序,您仍然可以将其放在同一个文件中?

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