有没有办法用swift2在Core Data上以编程方式创建一个实体?我搜索了一下,但没有找到。
qvtsj1bj1#
Web上只有几个教程(可能只有one)。我不是Xcode的GUI工具(Nibs、Storyboards、XCDataModeld等)的粉丝,所以用代码创建一切(从DB到UI)对我来说是家常便饭。@Lubos引用的文章(我在评论中添加了链接后2分钟,嗯...)是用ObjC写的。下面是一个Swift代码:
internal var _model: NSManagedObjectModel { let model = NSManagedObjectModel() // Create the entity let entity = NSEntityDescription() entity.name = "DTCachedFile" // Assume that there is a correct // `CachedFile` managed object class. entity.managedObjectClassName = String(CachedFile) // Create the attributes var properties = Array<NSAttributeDescription>() let remoteURLAttribute = NSAttributeDescription() remoteURLAttribute.name = "remoteURL" remoteURLAttribute.attributeType = .StringAttributeType remoteURLAttribute.optional = false remoteURLAttribute.indexed = true properties.append(remoteURLAttribute) let fileDataAttribute = NSAttributeDescription() fileDataAttribute.name = "fileData" fileDataAttribute.attributeType = .BinaryDataAttributeType fileDataAttribute.optional = false fileDataAttribute.allowsExternalBinaryDataStorage = true properties.append(fileDataAttribute) let lastAccessDateAttribute = NSAttributeDescription() lastAccessDateAttribute.name = "lastAccessDate" lastAccessDateAttribute.attributeType = .DateAttributeType lastAccessDateAttribute.optional = false properties.append(lastAccessDateAttribute) let expirationDateAttribute = NSAttributeDescription() expirationDateAttribute.name = "expirationDate" expirationDateAttribute.attributeType = .DateAttributeType expirationDateAttribute.optional = false properties.append(expirationDateAttribute) let contentTypeAttribute = NSAttributeDescription() contentTypeAttribute.name = "contentType" contentTypeAttribute.attributeType = .StringAttributeType contentTypeAttribute.optional = true properties.append(contentTypeAttribute) let fileSizeAttribute = NSAttributeDescription() fileSizeAttribute.name = "fileSize" fileSizeAttribute.attributeType = .Integer32AttributeType fileSizeAttribute.optional = false properties.append(fileSizeAttribute) let entityTagIdentifierAttribute = NSAttributeDescription() entityTagIdentifierAttribute.name = "entityTagIdentifier" entityTagIdentifierAttribute.attributeType = .StringAttributeType entityTagIdentifierAttribute.optional = true properties.append(entityTagIdentifierAttribute) // Add attributes to entity entity.properties = properties // Add entity to model model.entities = [entity] // Done :] return model }
此代码等同于此CD模型(在Xcode的GUI中创建):
在代码中创建模型比使用GUI复杂得多。但是,IMO,它比加载CoreData模型文件来获得你的模型更快更安全(如果没有文件存在呢?或者文件被损坏了呢?)。我所说的“更安全”是指您不必处理与从磁盘阅读CoreData模型相关的磁盘IO错误(您的模型在代码中,不需要在模型文件中)。
rslzwgfq2#
通过编程定义核心数据模型是可能的。我找到了一个很好的例子,虽然它是用Objective C编写的。我确信它也适用于Swift 2。你只需要重写它。应该需要几分钟。https://www.cocoanetics.com/2012/04/creating-a-coredata-model-in-code/
2条答案
按热度按时间qvtsj1bj1#
Web上只有几个教程(可能只有one)。
我不是Xcode的GUI工具(Nibs、Storyboards、XCDataModeld等)的粉丝,所以用代码创建一切(从DB到UI)对我来说是家常便饭。@Lubos引用的文章(我在评论中添加了链接后2分钟,嗯...)是用ObjC写的。
下面是一个Swift代码:
此代码等同于此CD模型(在Xcode的GUI中创建):
在代码中创建模型比使用GUI复杂得多。
但是,IMO,它比加载CoreData模型文件来获得你的模型更快更安全(如果没有文件存在呢?或者文件被损坏了呢?)。
我所说的“更安全”是指您不必处理与从磁盘阅读CoreData模型相关的磁盘IO错误(您的模型在代码中,不需要在模型文件中)。
rslzwgfq2#
通过编程定义核心数据模型是可能的。我找到了一个很好的例子,虽然它是用Objective C编写的。我确信它也适用于Swift 2。你只需要重写它。应该需要几分钟。
https://www.cocoanetics.com/2012/04/creating-a-coredata-model-in-code/