Swift - 来自 Core Data 版本的模型和 exc 错误访问
Swift - Model from Core Data release and exc bad access
我在这一行有 EXC_BAD_ACCESS:
self.accountControl.baseInfo = base
启用 NSZombies 时出现此错误:
-[CFString release]: message sent to deallocated instance 0x1478cbc0
我发现我的问题在这里:
override func viewDidLoad() {
super.viewDidLoad()
if baseInfo == nil {
baseInfo = StorageManager.sharedInstance.getBaseInfo()
reloadBaseInfo(false)
}
StorageManager 中的方法 getBaseInfo()
:
func getBaseInfo() -> BaseInfo? {
if let baseInfoCD = getBaseInfoCD() {
var baseInfo = BaseInfo()
baseInfo.update(baseInfoCD)
return baseInfo
}
return nil
}
func getBaseInfoCD() -> BaseInfoCD? {
let fetchRequest = NSFetchRequest(entityName: "BaseInfoCD")
var error: NSError?
if let fetchResults = managedObjectContext.executeFetchRequest(fetchRequest, error: &error) as? [BaseInfoCD] {
if fetchResults.count > 0 {
return fetchResults.last!
}
}
return nil
}
我认为问题出在 Core Data 和它释放对象上,但我不知道我做错了什么。这是 Zombie Instruments 的屏幕:
我做错了什么?我该如何解决?谢谢
这真的很奇怪,但我通过重命名 属性 解决了这个问题。我的 BaseInfo class 有 属性:
var newTicket: String = ""
BaseInfoCD 有:
@NSManaged var newTicket: String?
然后出现了问题。我想这是因为它以新开头。当我将它重命名为 ticketNew 时,它工作正常。
我在这一行有 EXC_BAD_ACCESS:
self.accountControl.baseInfo = base
启用 NSZombies 时出现此错误:
-[CFString release]: message sent to deallocated instance 0x1478cbc0
我发现我的问题在这里:
override func viewDidLoad() {
super.viewDidLoad()
if baseInfo == nil {
baseInfo = StorageManager.sharedInstance.getBaseInfo()
reloadBaseInfo(false)
}
StorageManager 中的方法 getBaseInfo()
:
func getBaseInfo() -> BaseInfo? {
if let baseInfoCD = getBaseInfoCD() {
var baseInfo = BaseInfo()
baseInfo.update(baseInfoCD)
return baseInfo
}
return nil
}
func getBaseInfoCD() -> BaseInfoCD? {
let fetchRequest = NSFetchRequest(entityName: "BaseInfoCD")
var error: NSError?
if let fetchResults = managedObjectContext.executeFetchRequest(fetchRequest, error: &error) as? [BaseInfoCD] {
if fetchResults.count > 0 {
return fetchResults.last!
}
}
return nil
}
我认为问题出在 Core Data 和它释放对象上,但我不知道我做错了什么。这是 Zombie Instruments 的屏幕:
我做错了什么?我该如何解决?谢谢
这真的很奇怪,但我通过重命名 属性 解决了这个问题。我的 BaseInfo class 有 属性:
var newTicket: String = ""
BaseInfoCD 有:
@NSManaged var newTicket: String?
然后出现了问题。我想这是因为它以新开头。当我将它重命名为 ticketNew 时,它工作正常。