2017-07-06 33 views
0

在我的UIViewController中,我调用另一个类中的方法,它返回一个NSManagedObjects列表,我在数组中实例化一个NSManagedObjects列表。 下面是代码:为什么我的NSManagedObjects数组失去了它的属性?

fileprivate var albumList = [Album]() 

private func loadAlbums() { 
    APIHandler().getUsersAlbums() { 
     albums in 
     self.albumList = albums 
     self.collectionView?.reloadData() 
    } 
} 

但是这引起了我阵列具有无属性一次loadAlbums已经完成,APIHandler的情况下清除。我解决了这个现在通过我的UIViewController有APIHandler的实例,并从那里调用该函数,就像这样:

let api = SpotifyAPIHandler() 
fileprivate var albumList = [Album]() 

private func loadAlbums() { 
    api.getUsersAlbums() { 
     albums in 
     self.albumList = albums 
     self.collectionView?.reloadData() 
    } 
} 

不过我不开心的与此有关。为什么会发生? 如何实例化一个全新的列表?

+1

NSManagedObjects是一类,而不是一个指针。请重新说明你的问题。如果您想基于现有对象创建新的托管对象,则应将其复制。有关详细信息,请参阅:https://stackoverflow.com/questions/2730832/how-can-i-duplicate-or-copy-a-core-data-managed-object – ninjaproger

+0

我没有看到任何明显的代码问题。 loadAlbums()完成后,您应该保存所有相册。你的意思是你的数组没有属性?你没有看到你的collectionView中有什么?你设置了你的collectionView.dataSource和collecitonView.delegate吗? – cloudcal

+0

我的数组在每个位置都有一个有效的NSManagedObject,但是如果我尝试获取albumList [0] .name,例如,名称将是零 –

回答

0

我觉得发生了什么事是你要调用的loadAlbums()func,而不是你可以做的是必须在APIHanderclass一个static refrence的乌尔APIHander像这样

class APIHander: NSObject { 
    static let handler = APIHander() 
} 
每次创建的 APIHandler一个新实例

那么你会打电话给你的API类似这样的

private func loadAlbums() { 
    APIHandler.handler.getUsersAlbums() { 
     albums in 
     self.albumList = albums 
     self.collectionView?.reloadData() 
    } 
} 
+0

我不认为这是'loadAlbum()'完成后解除分配的问题 - 每次都会保存数据,所以我认为这很好。 – cloudcal

相关问题