在核心数据对象更改时更新 uicollectionview
Updating uicollectionview when core data object changes
我正在尝试将 table 视图转换为集合视图。我可以很好地显示单元格,但在我将 view/come 返回或将单元格滚动到屏幕外之前,不会显示对它们所做的任何更改。数据来自核心数据
第一个单元格正在正确更新,但其他单元格没有。如果我再次更新,它们会更新,但只会更新为上一次更新的值。我可以看到正在调用更新函数,但并未调用配置单元格来实际更新内容,仅在第一个单元格上
完整代码在这里:http://pastebin.com/BDaVS6vq
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)
// 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
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
您的 ViewController
的 viewDidLoad
中可能缺少这些行:
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
并尝试使用:
func controllerDidChangeContent(controller: NSFetchedResultsController) {
self.collectionView.performBatchUpdates({ () -> Void in
self?.blockOperation.start();
}, completion: { (success) -> Void in
...
})
}
我还定义了:
func controllerWillChangeContent(controller: NSFetchedResultsController) {
self.blockOperation = NSBlockOperation();
}
使用了此处提供的代码及其工作方式
我正在尝试将 table 视图转换为集合视图。我可以很好地显示单元格,但在我将 view/come 返回或将单元格滚动到屏幕外之前,不会显示对它们所做的任何更改。数据来自核心数据
第一个单元格正在正确更新,但其他单元格没有。如果我再次更新,它们会更新,但只会更新为上一次更新的值。我可以看到正在调用更新函数,但并未调用配置单元格来实际更新内容,仅在第一个单元格上
完整代码在这里:http://pastebin.com/BDaVS6vq
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)
// 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
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
您的 ViewController
的 viewDidLoad
中可能缺少这些行:
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
并尝试使用:
func controllerDidChangeContent(controller: NSFetchedResultsController) {
self.collectionView.performBatchUpdates({ () -> Void in
self?.blockOperation.start();
}, completion: { (success) -> Void in
...
})
}
我还定义了:
func controllerWillChangeContent(controller: NSFetchedResultsController) {
self.blockOperation = NSBlockOperation();
}
使用了此处提供的代码及其工作方式