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

Pra*_*iya 5 core-data ios swift

我搜索了几个小时,但没有找到任何东西

我在Core Data中处于有线状态

获取对象的方法

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
}
Run Code Online (Sandbox Code Playgroud)

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

我从fetch获得的值是

 po print(self.arrTheater)
Run Code Online (Sandbox Code Playgroud)

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

从viewDidLoad调用此方法之后我重新加载tableview

Tableview cellForRow中没有任何内容

一行将值设置为标题标签 ,所有显示都很好

然后我只是滚动tableview或选择tableview

然后我打印

FAULT作为数据的价值

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

请帮我解释为什么它第一次显示数据然后显示故障

我已经 fetchReq.returnsObjectsAsFaults = false

提前致谢

pba*_*sdf 5

通常不需要担心故障(CoreData会在您访问其任何属性时自动触发故障并填充对象).

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

从长远来看,你应该考虑为DataController自己设置一个属性,或者让它成为一个单例,这样你就可以从任何视图控制器访问它,或者将它从视图控制器传递给视图控制器.


abh*_*ran 5

我有同样的问题。我从数据库中获取数据(并将其保存到本地数组),然后填充表。几秒钟后,如果我点击任何内容,应用程序就会崩溃。那时所有 NSManagedObjects 都出现了故障。

问题是,我在成功响应之间调用 api,删除数据库中的所有对象并从 api 响应添加新内容。由于 NSManagedObjects 是动态渲染的,因此我用来填充表的本地数组中的旧数据出现了错误。

如果有人遇到此类问题,请首先尝试进行以下设置:

urRequest.returnsObjectsAsFaults = false 
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,只需检查您是否在中间修改数据库(即,在第一次获取之后)。