为啥我的 NSManagedObjects 数组失去了它的属性?
Posted
技术标签:
【中文标题】为啥我的 NSManagedObjects 数组失去了它的属性?【英文标题】:Why does my array of NSManagedObjects is losing its properties?为什么我的 NSManagedObjects 数组失去了它的属性? 【发布时间】: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 是一个类,而不是一个指针。请改写你的问题。如果要基于现有对象创建新的托管对象,则应复制它。详情见:***.com/questions/2730832/… 我没有看到您的代码有任何明显的问题。在您的loadAlbums()
完成后,您应该保存所有相册。你的意思是你的数组有 nil 属性?您在 collectionView 中没有看到任何内容吗?你设置了你的 collectionView.dataSource 和 collecitonView.delegate 吗?
我的数组在每个位置都有一个有效的 NSManagedObject,但如果我尝试获取专辑列表[0].name,例如,名称将为 nil
也许只是因为我对 NSManagedObjects 没有太多经验,但我在想这是否不是因为 NSManagedObjectContext 驻留在 SpotifyAPIHandler 中?
【参考方案1】:
我认为发生的事情是,每次调用 loadAlbums()
func
时,您都在创建一个 APIHandler
的新实例,而您可以做的是在您的 APIHander
中添加一个 static
引用APIHander
class
就这样
class APIHander: NSObject
static let handler = APIHander()
然后你会像这样调用你的 API
private func loadAlbums()
APIHandler.handler.getUsersAlbums()
albums in
self.albumList = albums
self.collectionView?.reloadData()
【讨论】:
我认为这不是问题,因为它在loadAlbum()
完成后会被释放 - 每次都会保存数据,所以我认为这很好。以上是关于为啥我的 NSManagedObjects 数组失去了它的属性?的主要内容,如果未能解决你的问题,请参考以下文章
当我的@Published NSManagedObjects 数组更改时,我的 SwiftUI 列表不会更新
NSManagedObjects 数组在将其传递给另一个方法后具有空值
根据第二个数组对 NSManagedObjects 数组进行排序
NSManagedObjects 的深拷贝 NSMutableArray