在使用 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-推荐答案 strong>
这不是真正的答案,但我认为第 2 点和第 3 点无效?
不要公开你的方法——这里的问题与核心数据无关,而是与 Swift 的访问级别有关。您不能创建返回内部类型 Action 的公共(public)方法 loadActions 。您必须将 Action 公开,或将方法设为内部(即删除单词 public )
你可以在类中拥有方法 - 只需将它们写在那里?而且即使你需要使用扩展名,你仍然可以将它放在同一个文件中吗?
PS 如果你确实找到了一个好的 Swift 替代品,请告诉我。我现在正在寻找一个 - 这就是我首先找到您的问题的方式!
关于ios - 核心数据替代品,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/26175683/
|