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 = Ahmedabad; id = 1; isFav = 1; name = PVR;}),(entity:Theatre; id:0x7bf5ee60; data:{address = "Prahladnagar"; city = Ahmedabad; 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 = Ahmedabad; 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 = Ahmedabad; id = 8; isFav = 0; name ="广角"; })]
从viewDidLoad调用此方法之后我重新加载tableview
Tableview cellForRow中没有任何内容
一行将值设置为标题标签 ,所有显示都很好
然后我只是滚动tableview或选择tableview
然后我打印
FAULT作为数据的价值
我阅读理论,发现它只是占位符,但我无法取得它
请帮我解释为什么它第一次显示数据然后显示故障
我已经 fetchReq.returnsObjectsAsFaults = false
提前致谢
通常不需要担心故障(CoreData会在您访问其任何属性时自动触发故障并填充对象).
但在这种情况下,我怀疑发生了一些更邪恶的事情:DataController在该fetchAllCoreData方法中本地实例化,并且我担心managedObjectContext一旦方法完成就会被释放(连同相关联的).因此,返回数组包含已释放的上下文中的NSManagedObjects.要检查,请尝试创建moc属性而不是局部变量.这应该足以保持对上下文的永久引用(反过来将对底层堆栈具有强引用)并防止它被释放.
从长远来看,你应该考虑为DataController自己设置一个属性,或者让它成为一个单例,这样你就可以从任何视图控制器访问它,或者将它从视图控制器传递给视图控制器.
我有同样的问题。我从数据库中获取数据(并将其保存到本地数组),然后填充表。几秒钟后,如果我点击任何内容,应用程序就会崩溃。那时所有 NSManagedObjects 都出现了故障。
问题是,我在成功响应之间调用 api,删除数据库中的所有对象并从 api 响应添加新内容。由于 NSManagedObjects 是动态渲染的,因此我用来填充表的本地数组中的旧数据出现了错误。
如果有人遇到此类问题,请首先尝试进行以下设置:
urRequest.returnsObjectsAsFaults = false
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,只需检查您是否在中间修改数据库(即,在第一次获取之后)。
| 归档时间: |
|
| 查看次数: |
1940 次 |
| 最近记录: |