所以我有一个名为Student的NSManagedObject。当我在Student对象上调用方法时,我的代码中有一部分有时会中断,例如if let dcButton = view.viewWithTag(20) as? UIButton{
dcButton.removeFromSuperview()
}
。这给了我一个EXC_BAD_ACESS,让我相信它是一个线程核心数据问题。但是,在代码中断之前的一行我从对象访问变量并且没有运行时错误。所以我的问题是:在NSManagedObject中调用变量与调用方法之间有什么区别?是什么导致它打破一个而不是另一个?
注意:程序在方法中执行单行之前会中断。
以下是我的代码片段:
student.performTask()
let attendances = Attendance.createOrUpdateFromJsonDictionary(data!)
var seenIds = [NSNumber]()
for attendance in attendances {
let student = attendance.student
if !seenIds.contains(student.id) { //does not complain when accessing the id
seenIds.append(student.id)
let oldCurrent = student.isCurrent //does not complain or break here
student.setIsCurrent() //<- breaks here
是否也是一个NSManagedObject,其中有学生作为一种关系,而我正在抓住学生出席的事实?
答案 0 :(得分:0)
如果在另一个线程中调用它,那么您违反了Core Data的线程限制规则。
我强烈建议阅读核心数据编程指南(最近更新)的并发部分并应用其中的建议。
如果您想在第三方网络库的完成块中运行,则需要针对上下文调用-performBlock:
或-performBlockAndWait:
,并且只能访问其中的NSManagedObject
个实例块。否则你会得到意想不到的和不一致的结果。