rog*_*rgl 11 core-data ios swift
我正在尝试将一些RubyMotion代码移动到Swift.到目前为止它的作用.我不明白为什么以下结果无法传递给Document类:
var newObject : NSManagedObject
NSEntityDescription.insertNewObjectForEntityForName("Document", inManagedObjectContext:context)
as NSManagedObject
Run Code Online (Sandbox Code Playgroud)
insertNewObjectForEntityForName调用返回NSManagedObject类型的对象.但是为什么insertNewObjectForEntityForName不返回entity.managedObjectClassName指定的Document类型的对象?
我的实体看起来像这样:
func DocumentEntity () -> NSEntityDescription {
var entity = NSEntityDescription()
entity.name = "Document"
entity.managedObjectClassName = "Document"
var property = NSAttributeDescription()
property.name = "title"
property.attributeType = NSAttributeType.StringAttributeType
property.optional = false
entity.properties = [property]
return entity
}
class Document : NSManagedObject {
@NSManaged var title : String
}
model = NSManagedObjectModel()
model.entities = [DocumentEntity()]
var store = NSPersistentStoreCoordinator(managedObjectModel: model)
Run Code Online (Sandbox Code Playgroud)
mpr*_*vat 17
您需要添加@objc(Document)到Document类.这样Core Data(仍然在Objective-C中)可以处理你的Swift类.
@objc(Document)
class Document : NSManagedObject {
@NSManaged var title : String
}
Run Code Online (Sandbox Code Playgroud)
那么一切都会奏效:
var document = NSEntityDescription.insertNewObjectForEntityForName("Document", inManagedObjectContext: context) as Document
Run Code Online (Sandbox Code Playgroud)
将返回正确的类型
解决方案是将模块名称添加到类名.
例如
var entity = NSEntityDescription()
entity.name = "Document"
entity.managedObjectClassName = "TestSwift.Document"
Run Code Online (Sandbox Code Playgroud)
你试过了吗:
var document = NSEntityDescription.insertNewObjectForEntityForName("Document", inManagedObjectContext: context) as? Document
Run Code Online (Sandbox Code Playgroud)
这对我有用。
| 归档时间: |
|
| 查看次数: |
6776 次 |
| 最近记录: |