使用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道路并以正常方式创建我的整个模型,这就引出了我的问题。我如何以及在哪里保存这些物品?
答案 0 :(得分:0)
这不是一个真正的答案,但我不认为第2和第3点是有效的吗?
不要公开你的方法 - 这里的问题与核心数据无关,它与Swift的访问级别有关。您无法创建返回内部类型loadActions
的公共方法Action
。您必须公开Action
,或将方法设为内部(即删除单词public
)
你可以在课堂上使用这些方法 - 只需将它们写在那里?即使您需要使用扩展程序,您仍然可以将其放在同一个文件中?
PS如果您确实找到了一个好的Swift替代品,请告诉我。我现在正在寻找一个 - 这就是我如何找到你的问题!