Swift 在访问 NSManagedObject 的属性时给出错误线程 1:EXC_BAD_ACCESS(code=1, address=0x0)
Posted
技术标签:
【中文标题】Swift 在访问 NSManagedObject 的属性时给出错误线程 1:EXC_BAD_ACCESS(code=1, address=0x0)【英文标题】:Swift Gives error Thread 1: EXC_BAD_ACCESS(code=1, address=0x0) when accessing NSManagedObject's property 【发布时间】:2015-01-22 15:47:27 【问题描述】:我创建 NSManagedObject 的子类对象的函数是;
func loginMoldelWithName(name: NSString, atIndexPath indexPath: NSIndexPath) -> LoginModel
let entity = NSEntityDescription.entityForName("LoginModel", inManagedObjectContext: managedObjectContext!)
var login = LoginModel(entity: entity!, insertIntoManagedObjectContext: managedObjectContext)
login.name = name
login.date = NSDate()
login.rowIndex = indexPath.row as NSNumber
var error: NSError?
if !managedObjectContext!.save(&error)
println("\(TAG) Could not save \(error), \(error?.userInfo)")
return login as LoginModel
还有要删除的;
func deleteLoginModel(loginModel: LoginModel)
println("\(TAG) \(loginModel.name)")
managedObjectContext?.deleteObject(loginModel)
var error : NSError?
if(managedObjectContext!.save(&error) )
println("\(TAG) \(error?.localizedDescription)")
问题出在哪里;
let loginModel = loginModels[indexPath.row] as LoginModel
println("\(TAG) \(loginModel.name)")
// remove from Core Data
deleteLoginModel(loginModel)
...
当我尝试访问 loginModel.name 时删除 loginModel 对象后,我收到错误“线程 1:EXC_BAD_ACCESS(code=1, address=0x0)”
在变量视图中为 loginModel 写入了无效的表达式,请参见下面的 snaphsot...
我找不到我做错了什么以及 loginModel 实例可能发生了什么?
【问题讨论】:
【参考方案1】:从您附加的屏幕截图来看,似乎发生了错误,因为您试图在该对象被删除之后访问该对象的属性。此时,对象的属性将不再是有效的内存地址。
【讨论】:
loginModel 是保存在 loginModels 数组中的变量...“让 loginModel = loginModels[indexPath.row] as LoginModel” 我认为我只是删除了核心数据中的数据,而不是从数组中删除。当我在删除后打印数组的内容时,它会打印具有相关内存地址的 LoginModel 对象,例如“loginModels [3] (PasswordLockerSwift.LoginModel) 0x00007f92d9d4bc60 0x00007f92d9d4bc60”。但是我无法访问它的 name 属性。 因为还在数组中,所以loginModel实例还是有内存地址的。但是,由于底层 Core Data 对象已被删除,所有对象的属性现在都无效了。 如何检查coredata对象的实例是否无效?以上是关于Swift 在访问 NSManagedObject 的属性时给出错误线程 1:EXC_BAD_ACCESS(code=1, address=0x0)的主要内容,如果未能解决你的问题,请参考以下文章
Swift 在访问 NSManagedObject 的属性时给出错误线程 1:EXC_BAD_ACCESS(code=1, address=0x0)
Swift Core Data - 使用 NSManagedObject 子类访问获取的实体时出错
无法通过 Swift 扩展向objective-c NSManagedObject 子类添加方法