iOS 10.核心数据插入新对象sigABRT
iOS 10. CoreData insert new object sig ABRT
我试过 forEntityName: "Game", "MyApp.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: "MyApp.Game", into: managedObjectContext) as! Game
在Game+coreDataProperties文件中
extension Game {
@nonobjc class func fetchRequest() -> NSFetchRequest<Game> {
return NSFetchRequest<Game>(entityName: "Game");
}
游戏+coreDataClass
class Game: NSManagedObject {
}
我使用 .xcdatamodeld 为 CoreData 生成了文件:在对象检查器中我指定了名称:"Game"、Class "Game"、模块 "Current Product Module"、codegen "class definition",然后我使用 Editor/create 子类,在我得到 3 个文件后,我将 codegen 属性 设置为 "Manual/None"
我遇到 运行 时间错误:"signal SIGABRT" 尝试投射到游戏时:
NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game
我做错了什么?
另外,您能否建议我一本关于 CoreData 的好手册,应用了最新的更改?
首先,还没有人更新 iOS 10 核心数据更改的文档。预计他们将在接下来的几个月内开始出现(包括 Apple)。
其次,随着对 Core Data 的新更改,您应该不再需要在创建时强制转换。理想情况下,您现在可以这样做:
let word = Game(context: managedObjectContext)
它会做正确的事情。
顺便说一句,您不需要调用实体 "MyApp.Game"。它应该只是 "Game",这可能是您错误的核心。
我终于成功了。
这不是我在 iOS 10 和 xCode Beta 中使用 CoreData 时遇到的第一个问题。
因此,这是在 xCode 8:
中添加实体的一系列步骤
1.When 创建您的应用选择 CoreData 选项,这将创建 youAppName.xcdatamodeld 文件
2.选择youAppName.xcdatamodeld,添加实体按钮
3. 添加所需属性
4. 使用数据模型检查器设置代码生成:
实体名称 "Game"、Class 名称 "GameEntity"、模块 "Current Product Module"、codegen "class definition"
5. 命令 + s
6. Editor/create NSManagedObjectSubclass
7. 您将获得 3 个新文件:
GameEntity+CoreDataClass
游戏实体+核心属性
COREDATA
8.注释掉文件内容“COREDATA...”
9. youAppName.xcdatamodeld,数据模型检查员,现在当你生成文件时,将 Codeine 属性 从 "class definition" 更改为 "Manual/None"
以下是有关如何添加新对象的代码示例:
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)
}
首先,Xcode 8 会自动生成表示实体所需的 classes,因此您不必手动创建它们。
而不是:
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 中为 class 提供正确的名称
Setting class name in Data Model Inspector
我试过 forEntityName: "Game", "MyApp.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: "MyApp.Game", into: managedObjectContext) as! Game
在Game+coreDataProperties文件中
extension Game {
@nonobjc class func fetchRequest() -> NSFetchRequest<Game> {
return NSFetchRequest<Game>(entityName: "Game");
}
游戏+coreDataClass
class Game: NSManagedObject {
}
我使用 .xcdatamodeld 为 CoreData 生成了文件:在对象检查器中我指定了名称:"Game"、Class "Game"、模块 "Current Product Module"、codegen "class definition",然后我使用 Editor/create 子类,在我得到 3 个文件后,我将 codegen 属性 设置为 "Manual/None"
我遇到 运行 时间错误:"signal SIGABRT" 尝试投射到游戏时:
NSEntityDescription.insertNewObject(forEntityName: "MyApp.Game", into: managedObjectContext) as! Game
我做错了什么? 另外,您能否建议我一本关于 CoreData 的好手册,应用了最新的更改?
首先,还没有人更新 iOS 10 核心数据更改的文档。预计他们将在接下来的几个月内开始出现(包括 Apple)。
其次,随着对 Core Data 的新更改,您应该不再需要在创建时强制转换。理想情况下,您现在可以这样做:
let word = Game(context: managedObjectContext)
它会做正确的事情。
顺便说一句,您不需要调用实体 "MyApp.Game"。它应该只是 "Game",这可能是您错误的核心。
我终于成功了。
这不是我在 iOS 10 和 xCode Beta 中使用 CoreData 时遇到的第一个问题。
因此,这是在 xCode 8:
中添加实体的一系列步骤
1.When 创建您的应用选择 CoreData 选项,这将创建 youAppName.xcdatamodeld 文件
2.选择youAppName.xcdatamodeld,添加实体按钮
3. 添加所需属性
4. 使用数据模型检查器设置代码生成:
实体名称 "Game"、Class 名称 "GameEntity"、模块 "Current Product Module"、codegen "class definition"
5. 命令 + s
6. Editor/create NSManagedObjectSubclass
7. 您将获得 3 个新文件:
GameEntity+CoreDataClass
游戏实体+核心属性
COREDATA
8.注释掉文件内容“COREDATA...”
9. youAppName.xcdatamodeld,数据模型检查员,现在当你生成文件时,将 Codeine 属性 从 "class definition" 更改为 "Manual/None"
以下是有关如何添加新对象的代码示例:
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)
}
首先,Xcode 8 会自动生成表示实体所需的 classes,因此您不必手动创建它们。 而不是:
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 中为 class 提供正确的名称 Setting class name in Data Model Inspector