Swift iOS 10。CoreData插入新对象sig ABRT
我试过名字:“游戏”,“我的应用程序.游戏” 在我的dataManagerFile中: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
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