我的问题是我在两个不同的视图控制器中有两个tableView,当我将数据更新为一个时,另一个不会更新tableView。
FetchedResultsController(两个VC都相同)
fileprivate lazy var fetchedResultsControllerGift: NSFetchedResultsController<GiftMO> = {
// Create Fetch
let request: NSFetchRequest<GiftMO> = GiftMO.fetchRequest()
// Configure
let sectionDescriptor = NSSortDescriptor(key: "recName", ascending: true)
let timeDescriptor = NSSortDescriptor(key: "createdAt", ascending: true)
request.sortDescriptors = [sectionDescriptor, timeDescriptor]
// Create Controller
let fetchedResultsControllerGift = NSFetchedResultsController(fetchRequest: request, managedObjectContext: DatabaseController.createMoc(), sectionNameKeyPath: "recName", cacheName: nil)
// Configure Controller
fetchedResultsControllerGift.delegate = self
return fetchedResultsControllerGift
}()
我可以确认FRC的方法在第二个viewController中触发(控制器将/确实更改内容)并且数据是正确的,tableView无法反映更改。 我尝试在第二个VC的viewWillAppear中放置self.occTableView.reloadData(),但这只是出错:
“在调用-controllerDidChangeContent时,从NSFetchedResultsController的委托中捕获到异常:尝试从第2节删除第2行,但在使用userInfo(null)更新之前只有1个部分”
我的viewWillAppear在第二个VC中:
super.viewWillAppear(animated)
do {
try self.fetchedResultsControllerGift.performFetch()
} catch {
print("Error: \(error)")
}
self.occTableView.reloadData()
问题已解决对于任何遇到此问题的人。如果你有任何类型的collectionView或tableView嵌入在另一个重复视图中(我有一个嵌入在collectionViewCell中的tableView)父视图控制器不能是嵌入视图的委托或数据源。您必须在父视图的CELL类中进行所有视图的配置(行,部分等)。 我必须在我的collectionViewCell类中编写所有核心数据(FRC)和tableView配置,它完美无缺! 哦,并确保还将嵌入视图的@IBOutlet链接到其父视图的CELL。
参见:https://stackoverflow.com/a/42628971/7277906
非常感谢你的帮助!!