为啥我的 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

核心数据:在表格视图中滚动时,存储在数组中的 NSManagedObjects 变为 nil

序列化包含对核心数据中 NSManagedObjects 的引用的多维数组