【发布时间】:2017-07-06 18:10:32
【问题描述】:
在我的 UIViewController 中,我调用另一个类中的一个方法,该方法返回一个 NSManagedObjects 列表,我在一个数组中对其进行实例化。 代码如下:
fileprivate var albumList = [Album]()
private func loadAlbums() {
APIHandler().getUsersAlbums() {
albums in
self.albumList = albums
self.collectionView?.reloadData()
}
}
但是一旦 loadAlbums 完成并且 APIHandler 的实例被清除,这会导致我的数组具有 nil 属性。我现在通过在我的 UIViewController 上有一个 APIHandler 实例并从那里调用函数来解决这个问题,如下所示:
let api = SpotifyAPIHandler()
fileprivate var albumList = [Album]()
private func loadAlbums() {
api.getUsersAlbums() {
albums in
self.albumList = albums
self.collectionView?.reloadData()
}
}
我仍然对此不满意。为什么会这样? 如何实例化一个全新的列表?
【问题讨论】:
-
NSManagedObjects 是一个类,而不是一个指针。请改写你的问题。如果要基于现有对象创建新的托管对象,则应复制它。详情见:stackoverflow.com/questions/2730832/…
-
我没有看到您的代码有任何明显的问题。在您的
loadAlbums()完成后,您应该保存所有相册。你的意思是你的数组有 nil 属性?您在 collectionView 中没有看到任何内容吗?你设置了你的 collectionView.dataSource 和 collecitonView.delegate 吗? -
我的数组在每个位置都有一个有效的 NSManagedObject,但如果我尝试获取专辑列表[0].name,例如,名称将为 nil
-
也许只是因为我对 NSManagedObjects 没有太多经验,但我在想这是否不是因为 NSManagedObjectContext 驻留在 SpotifyAPIHandler 中?
标签: ios swift pointers nsmanagedobject