调用NSManagedObject函数会中断,但在访问变量时则不会

时间:2015-10-06 20:08:51

标签: multithreading swift core-data exc-bad-access nsmanagedobject

所以我有一个名为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,其中有学生作为一种关系,而我正在抓住学生出席的事实?

1 个答案:

答案 0 :(得分:0)

如果在另一个线程中调用它,那么您违反了Core Data的线程限制规则。

我强烈建议阅读核心数据编程指南(最近更新)的并发部分并应用其中的建议。

如果您想在第三方网络库的完成块中运行,则需要针对上下文调用-performBlock:-performBlockAndWait:,并且只能访问其中的NSManagedObject个实例块。否则你会得到意想不到的和不一致的结果。