核心数据<故障>使用一次后

我search了几个小时,但没有find任何东西

我在核心数据有线情况

方法来获取对象

func fetchAllCoreData() -> NSArray? { let moc = DataController().managedObjectContext let fetchReq = NSFetchRequest(entityName: "Theater") var array = [Theater]() fetchReq.returnsObjectsAsFaults = false do { let obj = try moc.executeFetchRequest(fetchReq) as! [Theater] for var details in obj { array.append(details) } } catch { print("Error in Fetching") return nil } return array } 

DataController()来自http://www.codebeaulieu.com/10/adding-core-data-using-swift-2

我从获取值是

  po print(self.arrTheater) 

(实体:Theater; id:0x7bf67a00; data:{address = Iskon; city = Ahmedab​​ad; id = 1; isFav = 1; name = PVR;}),(entity:Theater; id:0x7bf5ee60; data:{address = “Prahladnagar”; city = Ahmedab​​ad; id = 2; isFav = 0; name = Cinemex;}),(entity:Theater; id:0x7bf5ee70; data:{address =“New Address”; city = Rajkot; id = 3; name =“Blue Game”;}),(entity:Theater; id:0x7bf5ee80; data:{address =“New ISKON”; city = Porbandar; id = 4; isFav = 1; name = JaiHind;} isFav = )(实体:Theater; id:0x7bf55120; data:{address =“New Address”; city = Mumbai; id = 5; isFav = 0; name =“Drama”;}),(entity:Theater; id:0x7bf55130 ; data:{address =“Vijay 4 Road”; city = Ahmedab​​ad; id = 6; isFav = 1; name = PVR;}),(entity:Theater; id:0x7bf55140; data:{address =“Mahavir Nagar”; city = Delhi; id = 7; isFav = 0; name = Cinemex;}),(entity:Theater; id:0x7bf28570; data:{address = Iskon; city = Ahmedab​​ad; id = 8; isFav = 0; name =广angular”; })]

这个方法是从viewDidLoad调用之后,我重新加载tableview

Tableview cellForRow中没有任何东西

一行为标题标签设置值 ,全部显示正常

然后我只是滚动tableview或selecttableview

然后我打印

FAULT作为数据的值

我读理论,发现它只是占位符,但我无法取得

请帮助我为什么第一次显示数据,然后显示错误

我已经fetchReq.returnsObjectsAsFaults = false

提前致谢

一般来说,故障是不必担心的(一旦你访问了它的任何属性,CoreData将自动触发故障并填充对象)。

但在这种情况下,我怀疑有一些更邪恶的事情发生: DataControllerfetchAllCoreData方法中本地实例化,并且我担心一旦方法完成,它将被释放(连同关联的managedObjectContext )。 您的返回数组因此包含已被释放的上下文的NSManagedObjects。 要检查,请尝试使moc属性而不是本地variables。 这应该足以保持对上下文的永久引用(这反过来将具有对底层栈的强引用)并防止其被释放。

从长远来看,您应该考虑为DataController本身设置属性,并将其设置为单例,以便您可以从任何视图控制器访问它,或者将其从视图控制器传递给视图控制器。

我有同样的问题。 我从数据库中获取数据(并将其保存到本地数组),然后填充表。 稍后几秒钟后,如果我点击任何内容,应用程序崩溃。 所有NSManagedObjects在那个时候都是错误的。

问题是,我正在调用一个API和成功的响应,我删除了数据库中的所有对象,并从API响应添加新的内容。 由于NSManagedObjects是dynamic呈现的,我用来填充表格的本地数组中的旧数据是错误的。

如果有人面临这样的问题,只要检查你是否正在修改数据库(即在第一次获取之后)。