Update for Xcode 8:
在Xcode 8中,需要转到Core Data Model Editor和Show the File Inspector . 靠近底部是代码生成的选项 . 选择Swift .
Edit :我找到了从Core Data实体生成Swift模型的解决方案:
在Xcode上:
编辑>创建NSManagedOjbect>单击按钮"Next">单击按钮"Next">选择"Swift" Langage>单击按钮"Create"
我使用Core Data在Xcode 6 beta上创建了一个新的Swift项目,尝试了Swift语言 .
当我从Core Data的实体生成模型时,Xcode创建了Objective-C模型 .
有没有办法用Core Data生成Swift模型而不是Obejctive-C模型?
谢谢 !
6 回答
让我们看看Objective-C的方式:
Person.h ( Headers 文件)
Person.m (实施 - 档案)
斯威夫特
Xcode6-Beta中已包含的文档说:
这就是我如何为Swift重写上面的例子(未经测试):
Person.swift
根据你的问题,我认为子类生成功能可能还没有包含在Xcode6中 . 当您在Xcode中创建Cocoa-Project时,您是否确定已选择“Swift”作为编程语言?
您可以使用
NSEntityDescription.insertNewObjectForEntityForName
获取Swift模型,但您必须编辑核心数据模型文件,而不是使用Person
作为类实体但<ProjectName>.Person
否则返回NSManagedObject
...使用
println()
你不会看到Person
实例,但是像<_TtC5ProjectName4Person: 0xc9ad5f0>
这样的东西,但调用这个方法将证明它是真实的Person
实例 . 我想这只是Swift生成唯一类名的方式,而不是冲突,CoreData方法显示了这种内部机制 .Apple documentation says:
根据Apple新的In CoreData框架:38分钟(WWDC2014会话225),在检查员的数据模型中,使用项目名称为类名添加前缀 . 喜欢 projectName.Doctor
我试过了,但会发生的是生成的托管对象类变为: projectName.swift 而不是 Doctor.swift . 即使是阶级声明也变成 class projectName: ManagedObject
Solution:
在数据模型检查器中,只需将对象的名称和类指定为您想要的名称, example: Doctor
生成对象模型并选择Swift后,将创建一个文件( Doctor.swift ) .
现在,在Core Data中插入新记录时,即使将新插入的对象强制转换为正确的对象名,也可能会出现错误"Class not found, using default NSManagedObject instead" .
要解决这个问题,您只需要在类声明之上添加 @objc(class name) . 见下面的示例 .
然后:
保存上下文以提交插入 .
我测试了@NSManaged,它没用 . :( . 但是由xcdatamodel生成的混合模型文件(.h),它成功 . 请阅读https://github.com/iascchen/SwiftCoreDataSimpleDemo中的文档和代码
或者,您可以将
#import "Person.h"
添加到Xcode为您生成的桥接头Project-Bridging-Header.h
(如果您接受它的生成要约) . 然后你就可以使用所有自动生成的Obj-C,就好像它是原生的Swift一样 .编辑器 - >创建NSManagedObject子类适用于Swift
只需完成所有常用步骤,但是当您创建文件时,选择语言'Swift'如果它使用了Swift项目创建NSManagedObject子类,它将默认为Objective C