核心数据未更新其他ViewController

时间:2017-03-28 18:08:19

标签: ios swift xcode tableview reloaddata

我的问题是我在两个不同的视图控制器中有两个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

非常感谢你的帮助!!

0 个答案:

没有答案