简体   繁体   English

核心数据对象更改时更新uicollectionview

[英]Updating uicollectionview when core data object changes

I'm trying to convert a table view to a collection view. 我正在尝试将表视图转换为集合视图。 I have it display the cells fine but any changes made to them aren't being displayed until i leave the view/come back or scroll the cell off screen. 我让它很好地显示了单元格,但是对它们所做的任何更改都不会显示,直到我离开视图/回来或在屏幕外滚动单元格为止。 The data comes from core data 数据来自核心数据

The first cell is being update correctly, but the other cells aren't. 第一个单元正在正确更新,而其他单元则没有。 If i update again, they get updated but only to the value of the previous update. 如果我再次更新,它们将被更新,但仅更新为先前更新的值。 I can see the update function being called but the configure cell isn't being called to actually update the contents, only on the first cell 我可以看到调用了update函数,但是没有调用configure单元来实际更新内容,仅在第一个单元上

Full code here: http://pastebin.com/BDaVS6vq 完整代码在这里: http//pastebin.com/BDaVS6vq

The results of the nslogs give nslogs的结果给出

// View initial load 2016-05-18 15:03:38.012 Calona[1304:315892] 3. Pet: Optional("Pea") - Exp: Optional(2000) 2016-05-18 15:03:38.022 Calona[1304:315892] 3. Pet: Optional("Squi") - Exp: Optional(2000) 2016-05-18 15:03:38.033 Calona[1304:315892] 3. Pet: Optional("Whisper Light") - Exp: Optional(2000) //查看初始负载2016-05-18 15:03:38.012 Calona [1304:315892] 3. Pet:可选(“豌豆”)-Exp:可选(2000)2016-05-18 15:03:38.022 Calona [ 1304:315892] 3.宠物:可选(“ Squi”)-Exp:可选(2000年)2016-05-18 15:03:38.033 Calona [1304:315892] 3.宠物:可选(“ Whisper Light”)-Exp :可选(2000)

// After first update 2016-05-18 15:06:12.686 Calona[1309:316804] 1. User Pet: Optional("Pea") 2016-05-18 15:06:12.698 Calona[1309:316804] 2. Update 2016-05-18 15:06:12.705 Calona[1309:316804] 3. Pet: Optional("Pea") - Exp: Optional(4000) 2016-05-18 15:06:12.710 Calona[1309:316804] 3. Pet: Optional("Squi") - Exp: Optional(3000) 2016-05-18 15:06:12.714 Calona[1309:316804] 3. Pet: Optional("Whisper Light") - Exp: Optional(3000) 2016-05-18 15:06:12.725 Calona[1309:316804] 1. User Pet: Optional("Squi") 2016-05-18 15:06:12.732 Calona[1309:316804] 2. Update 2016-05-18 15:06:12.737 Calona[1309:316804] 1. User Pet: Optional("Whisper Light") 2016-05-18 15:06:12.742 Calona[1309:316804] 2. Update 2016-05-18 15:06:12.895 Calona[1309:316804] 2. Update 2016-05-18 15:06:12.895 Calona[1309:316804] 2. Update //在首次更新后2016-05-18 15:06:12.686 Calona [1309:316804] 1.用户Pet:可选(“豌豆”)2016-05-18 15:06:12.698 Calona [1309:316804] 2。更新2016-05-18 15:06:12.705 Calona [1309:316804] 3.宠物:Optional(“豌豆”)-Exp:Optional(4000)2016-05-18 15:06:12.710 Calona [1309:316804] 3.宠物:可选(“ Squi”)-体验:可选(3000)2016-05-18 15:06:12.714 Calona [1309:316804] 3.宠物:可选(“耳语灯”)-体验:可选(3000 )2016-05-18 15:06:12.725 Calona [1309:316804] 1.用户宠物:可选(“ Squi”)2016-05-18 15:06:12.732 Calona [1309:316804] 2.更新2016-05 -18 15:06:12.737 Calona [1309:316804] 1.用户宠物:可选(“耳语灯”)2016-05-18 15:06:12.742 Calona [1309:316804] 2.更新2016-05-18 15 :06:12.895 Calona [1309:316804] 2.更新2016-05-18 15:06:12.895 Calona [1309:316804] 2.更新

After second update 2016-05-18 15:06:26.903 Calona[1309:316804] 1. User Pet: Optional("Pea") 2016-05-18 15:06:26.918 Calona[1309:316804] 2. Update 2016-05-18 15:06:26.924 Calona[1309:316804] 3. Pet: Optional("Pea") - Exp: Optional(5000) 2016-05-18 15:06:26.931 Calona[1309:316804] 3. Pet: Optional("Squi") - Exp: Optional(4000) 2016-05-18 15:06:26.936 Calona[1309:316804] 3. Pet: Optional("Whisper Light") - Exp: Optional(4000) 2016-05-18 15:06:26.945 Calona[1309:316804] 1. User Pet: Optional("Squi") 2016-05-18 15:06:26.952 Calona[1309:316804] 2. Update 2016-05-18 15:06:26.958 Calona[1309:316804] 1. User Pet: Optional("Whisper Light") 2016-05-18 15:06:26.962 Calona[1309:316804] 2. Update 2016-05-18 15:06:27.045 Calona[1309:316804] 2. Update 2016-05-18 15:06:27.047 Calona[1309:316804] 2. Update 2016-05-18 15:06:27.048 Calona[1309:316804] 2. Update 在第二次更新后2016-05-18 15:06:26.903 Calona [1309:316804] 1.用户宠物:可选(“豌豆”)2016-05-18 15:06:26.918 Calona [1309:316804] 2.更新2016 -05-18 15:06:26.924 Calona [1309:316804] 3.宠物:Optional(“豌豆”)-Exp:Optional(5000)2016-05-18 15:06:26.931 Calona [1309:316804] 3。宠物:可选(“ Squi”)-体验:可选(4000)2016-05-18 15:06:26.936 Calona [1309:316804] 3.宠物:可选(“耳语灯”)-体验:可选(4000)2016 -05-18 15:06:26.945 Calona [1309:316804] 1.用户Pet:可选(“ Squi”)2016-05-18 15:06:26.952 Calona [1309:316804] 2.更新2016-05-18 15:06:26.958 Calona [1309:316804] 1.用户宠物:可选(“耳语灯”)2016-05-18 15:06:26.962 Calona [1309:316804] 2.更新2016-05-18 15:06 :27.045 Calona [1309:316804] 2.更新2016-05-18 15:06:27.047 Calona [1309:316804] 2.更新2016-05-18 15:06:27.048 Calona [1309:316804] 2.更新

It's possible that are missing these lines in the viewDidLoad of your ViewController : 您的ViewControllerviewDidLoad中可能缺少这些行:

self.collectionView.dataSource = self;
self.collectionView.delegate = self;

and try to use : 并尝试使用:

func controllerDidChangeContent(controller: NSFetchedResultsController) {
    self.collectionView.performBatchUpdates({ () -> Void in
        self?.blockOperation.start();
        }, completion: { (success) -> Void in
            ...
    })
}

and I also defined: 而且我还定义了:

func controllerWillChangeContent(controller: NSFetchedResultsController) {
    self.blockOperation = NSBlockOperation();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM