我试过forEntityName:" Game"," MyApp.Game"。
在我的dataManagerFile中:
let appDelegate = UIApplication.shared().delegate as! AppDelegate
let container = appDelegate.persistentContainer
let managedObjectContext = container.viewContext
for item in items {
let word = NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game
在Game + coreDataProperties文件中
extension Game {
@nonobjc class func fetchRequest() -> NSFetchRequest<Game> {
return NSFetchRequest<Game>(entityName: "Game");
}
在Game + coreDataClass
中class Game: NSManagedObject {
}
我使用.xcdatamodeld为CoreData生成文件:在对象检查器中我指定了名称:&#34; Game&#34;,Class&#34; Game&#34;,Module&#34; Current Product Module&#34;, codegen&#34;类定义&#34;,然后我使用了Editor / create子类,在我得到3个文件后,我将codegen属性设置为&#34; Manual / None&#34;
我遇到了运行时错误:&#34;信号SIGABRT&#34;当试图投射到游戏中时:
NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game
我做错了什么? 您也可以向我推荐一本关于CoreData的好手册,并应用最新的更改吗?
答案 0 :(得分:3)
首先,还没有人更新iOS 10核心数据更改的文档。预计他们将在未来几个月内出现(包括Apple)。
其次,随着对Core Data的新更改,您不再需要强制转换。理想情况下,您现在可以这样做:
let word = Game(context: managedObjectContext)
它会做正确的事。
顺便说一句,您不应该调用实体“MyApp.Game”。它应该只是“游戏”,这可能是你错误的核心。答案 1 :(得分:1)
最后,我让它发挥作用
这不是我在iOS 10中使用CoreData在xCode Beta上遇到的第一个问题
所以这里是在xCode 8中添加实体的一系列步骤:
1.当创建应用程序选择CoreData选项时,这将创建youAppName.xcdatamodeld文件
2.选择youAppName.xcdatamodeld,添加实体按钮
3.添加必需的属性
4.使用数据模型检查器来设置代码生成:
实体名称“游戏”,类名“GameEntity”,模块“当前产品模块”,codegen“类定义”
5. cmd + s
6.编辑/创建NSManagedObjectSubclass
7.您将获得3个新文件:
GameEntity + CoreDataClass
GameEntity + CoreProperties
的 COREDATA 强>
8.注释文件“ COREDATA ...”的内容
9. youAppName.xcdatamodeld,数据模型检查器,现在当您生成文件时,将Codeine属性从“类定义”更改为“手动/无”
以下是有关如何添加新对象的代码示例:
let appDelegate = UIApplication.shared().delegate as! AppDelegate
let container = appDelegate.persistentContainer
let managedObjectContext = container.viewContext
for item in items {
let game = NSEntityDescription.insertNewObject(forEntityName: "Game", into: managedObjectContext) as! GameEntity
game.status = item.status
game.rs = item.rs
game.score = item.score
do {
try managedObjectContext.save()
这是一个关于如何删除数据的代码示例:
let appDelegate = UIApplication.shared().delegate as! AppDelegate
let container = appDelegate.persistentContainer
let managedObjectContext = container.viewContext
let fetchRequest: NSFetchRequest<GameEntity> = GameEntity.fetchRequest()
do {
let games = try managedObjectContext.fetch(fetchRequest)
for game in games {
managedObjectContext.delete(game)
}
答案 2 :(得分:-1)
首先,Xcode 8会自动生成表示实体所需的类,因此您不必手动创建它们。 而不是:
let appDelegate = UIApplication.shared().delegate as! AppDelegate
let container = appDelegate.persistentContainer
let managedObjectContext = container.viewContext
for item in items {
let word = NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game
你可以试试这个:
let appDelegate = UIApplication.shared().delegate as! AppDelegate
let container = appDelegate.persistentContainer
let managedObjectContext = container.viewContext
for item in items {
let word = NSEntityDescription.insertNewObject(forEntityName: "Game", into: managedObjectContext) as! Game
但请确保在Data Model Inspector中为该类指定正确的名称 Setting class name in Data Model Inspector