加载主TableViewController后,值从CoRe DaTa消失

时间:2017-07-27 18:30:33

标签: ios swift core-data ios10

当我从CoreData加载主TableView项目列表时,它完全显示:

let fetchRequest:NSFetchRequest<Identity> = Identity.fetchRequest()
        do
        {
            identities = try DatabaseController.getContext().fetch(fetchRequest)
            print("number of results: \(identities.count)")
            for identity in identities as [Identity]
            {
                print("\(identity.pName!) is \(identity.accuracy)% Robesper. Updeted \(identity.lastModified!).")
            }
        }
        catch
        {
            print("Error fetchRequest in ViewWillApper: \(error)")
        }

删除也很有效,所以我创建了一个新的NavigationController和一个用于添加新对象的视图。

要检查列表并找出问题所在(显然),我输出list.count。因为当我加载主ListView与列表新的ITEM基本上没有出现。但是,当我重新启动SIMULATOR时,它会显示所有项目。

所以  1.创建新对象。

  1. 将此插入CoreData。 enter image description here
  2. 经过。它就在那里!你可以看到......
  3. > number of results: 3 Hello World is 99% Robesper. Updeted 2017-07-08
    > 17:50:30 +0000. Sex is 99% Robesper. Updeted 2017-07-27 17:56:12
    > +0000. test is 99% Robesper. Updeted 2017-07-27 18:03:28 +0000.
    
    1. 现在 - &gt;转到TableView - &gt;我检查了viewDidLoad和viewWillAppear的列表。

    2. 是“0”。太棒了,因为它不是很乱,我们现在可以从TableViewController中的CoreData列表中查看。

      number of results viewDidLoad: 0
      viewWillAppear: 0
      number of results: 2
      Sex is 99% Robesper. Updeted 2017-07-27 17:56:12 +0000.
      Hello World is 99% Robesper. Updeted 2017-07-08 17:50:30 +0000.
      after fetch: 2
      
    3. 取出。但现在缺少1个新值!?什么??? enter image description here

    4. 重新启动SIMULATOR。它现在给我看了3个项目。但是当我重复添加项目时,它会再次发生。 enter image description here
    5. 可能,因为程序已经终止,我们从AppDelegate中保存了它?

      func applicationWillTerminate(_ application: UIApplication)
      {
          DatabaseController.saveContext()
      }
      

      我在ViewWillAppear上粘贴了保存.saveContext(),但没有用。 WHAAAAT?我做错了什么人?请!拯救我:D

3 个答案:

答案 0 :(得分:1)

在从核心数据中获取结果后,当视图出现在主队列中时,您应该重新加载表。

DispatchQueue.main.async {
tableView.reloadData()
}

答案 1 :(得分:0)

  1. 完成插入项目后,应保存上下文。

  2. 这些观点不会自我更新。您需要在表视图上重新获取并调用reloadData。或者使用NSFetchedResultsController将表连接到CoreData查询:https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller

答案 2 :(得分:0)

获取进程/设置变量......然后......

我以为我应该清理用于存储数据的临时变量。所以我使用DatabaseController.getContext().delete(identity)来保持干净。 但是,在SWIFT中没有必要这样做,因为这个MANAGER可以为您完成。所有你需要的 - SAVE'n'GO重新加载表/数据列表 只是评论这解决了所有问题)

//DatabaseController.getContext().delete(identity)
DatabaseController.saveContext()