Ios 保存上下文时不会将项目添加到核心数据
我正在尝试构建一个核心数据应用程序,我正在使用一些基于书本的代码 为了简化代码,我有如下内容:Ios 保存上下文时不会将项目添加到核心数据,ios,swift,core-data,Ios,Swift,Core Data,我正在尝试构建一个核心数据应用程序,我正在使用一些基于书本的代码 为了简化代码,我有如下内容: class City: NSManagedObject { @NSManaged public private(set) var name: String @NSManaged public private(set) var population: Int public static func insert(context: NSManagedObjectContext, n
class City: NSManagedObject {
@NSManaged public private(set) var name: String
@NSManaged public private(set) var population: Int
public static func insert(context: NSManagedObjectContext, name: String, population: Int) -> City {
let city: City = context.insertObject()
city.name = name
city.population = population
return city
}
}
extension NSManagedObjectContext {
public func insertObject<A: NSManagedObject>() -> A {
guard let obj = NSEntityDescription.insertNewObjectForEntityForName("City", inManagedObjectContext: self) as? A else {
fatalError("Wrong object type")
}
return obj
}
public func saveOrRoleback() -> Bool {
do {
try save()
return true
} catch {
rollback()
return false
}
}
public func performChanges(block: () -> ()) {
performBlockAndWait {
block()
print(self.saveOrRoleback())
}
}
}
func addCity() {
self.context.performChanges {
City.insert(self.context, name: self.name.text!, amount: Int(self.population.text!))
}
}
编辑2:-添加数据后的sql调试
-06-18 22:31:15.042 Savings+[1100:39698] CoreData: sql: BEGIN EXCLUSIVE
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: COMMIT
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: BEGIN EXCLUSIVE
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: INSERT INTO ZTRANSACTION(Z_PK, Z_ENT, Z_OPT, ZAMOUNT, ZDATE, ZNAME, ZTYPE) VALUES(?, ?, ?, ?, ?, ?, ?)
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: COMMIT
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: sql: pragma page_count
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: annotation: sql execution time: 0.0003s
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: sql: pragma freelist_count
如评论/聊天中所述:
您如何/在何处创建您的上下文?它是连接到持久存储协调器的主队列并发上下文吗?您是如何检查sqlite文件的?您是否尝试执行提取以确认数据库为空?@SeanCAtkinson:是的,它是一个MainQueueConcurrencyType,并且还连接到一个持久存储协调器。我正在我的主视图控制器中创建它,并将其传递给其他视图控制器。@pbasdf:我使用sql reader软件进行了检查。但是当我第一次运行应用程序时,我正在尝试获取它们。您的sql阅读器是否使用WAL和SHM文件以及.sqlite?
-06-18 22:31:15.042 Savings+[1100:39698] CoreData: sql: BEGIN EXCLUSIVE
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
2016-06-18 22:31:15.043 Savings+[1100:39698] CoreData: sql: COMMIT
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: BEGIN EXCLUSIVE
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: INSERT INTO ZTRANSACTION(Z_PK, Z_ENT, Z_OPT, ZAMOUNT, ZDATE, ZNAME, ZTYPE) VALUES(?, ?, ?, ?, ?, ?, ?)
2016-06-18 22:31:15.045 Savings+[1100:39698] CoreData: sql: COMMIT
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: sql: pragma page_count
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: annotation: sql execution time: 0.0003s
2016-06-18 22:31:15.046 Savings+[1100:39698] CoreData: sql: pragma freelist_count