Swift iOS 10。CoreData插入新对象sig ABRT

Swift iOS 10。CoreData插入新对象sig ABRT,swift,core-data,ios10,xcode8-beta2,Swift,Core Data,Ios10,Xcode8 Beta2,我试过名字:“游戏”,“我的应用程序.游戏” 在我的dataManagerFile中: let appDelegate = UIApplication.shared().delegate as! AppDelegate let container = appDelegate.persistentContainer let managedObjectContext = container.viewCo

我试过名字:“游戏”,“我的应用程序.游戏”

在我的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");
    }
我使用.xcdatamodeld为CoreData生成了文件:在object inspector中,我指定了名称:“Game”、类“Game”、模块“Current Product Module”、codegen“Class definition”,然后使用编辑器/创建子类,在获得3个文件后,我将codegen属性设置为“Manual/None”

我在尝试投出游戏时出现运行时错误:“信号SIGABRT”:

NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game
我做错了什么?
另外,您能给我一本关于CoreData的好手册,并应用最新的更改吗?

首先,还没有人更新iOS 10核心数据更改的文档。预计他们将在未来几个月内开始出现(包括苹果)

其次,随着核心数据的新变化,您应该不再需要对创建进行强制转换。理想情况下,您现在可以:

let word = Game(context: managedObjectContext)
它会做正确的事情


顺便说一句,您不需要调用实体“MyApp.Game”。这应该只是“游戏”,这可能是你错误的核心。

最后,我成功了。
这不是我在iOS 10的xCode Beta版上使用CoreData时遇到的第一个问题。
下面是在xCode 8中添加实体的一系列步骤:
1.创建应用程序选取CoreData选项时,将创建youAppName.xcdatamodeld文件
2.选择youAppName.xcdatamodeld,添加实体按钮
3.添加所需的属性
4.使用数据模型检查器设置代码生成:
实体名称“游戏”,类名“游戏实体”,模块“当前产品模块”,代码“类定义”
5.cmd+s
6.编辑器/创建NSManagedObjectSubclass
7.您将获得3个新文件:
GameEntity+CoreDataClass
GameEntity+CoreProperties
COREDATA
8.注释掉文件“COREDATA…”
9youAppName.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)
            }
让appDelegate=UIApplication.shared().delegate为!AppDelegate
让容器=appDelegate.persistentContainer
让managedObjectContext=container.viewContext
let fetchRequest:NSFetchRequest=GameEntity.fetchRequest()
做{
let games=尝试managedObjectContext.fetch(fetchRequest)
游戏中的游戏{
managedObjectContext.delete(游戏)
}

首先,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
但请确保在数据模型检查器中为类指定正确的名称

谢谢你的回复。核心数据有更新,但有点缩写)我希望我能让word=…,但我得到了编译器错误是的,我只是用了“游戏”苹果及其文档中有更多的更新。如果您遇到编译错误,那么您会遇到什么编译错误?这表明您的配置/模型/代码中存在错误。您不应该更改类的生成。这意味着将不受影响,Xcode将使类文件保持最新状态te(或扩展名,如果您这样设置的话)。如果您关闭代码生成并更改模型文件,它们将不同步。顺便说一句,您在实体创建上的强制转换表明有问题。如果您的代码配置正确,您可以创建我在回答中提到的
游戏
实体。
    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