代码之家  ›  专栏  ›  技术社区  ›  J A S K I E R

加载主TableViewController后,值从核心数据中消失

  •  0
  • J A S K I E R  · 技术社区  · 7 年前

    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和一个视图,用于添加新对象。

    为了检查列表并找出问题所在(显然),我输出了列表。因为当我加载带有列表的主表视图时,新项基本上不会出现。然而,当我重新启动模拟器时,它会显示所有项目。

    所以

    1. 将其插入CoreData。 enter image description here
    2. 选中的。它在那里!你可以看到。。。
    > 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. 它是“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
      
    2. 取来。但是现在缺少1个新值!?什么 enter image description here

    3. enter image description here

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

    我将save.saveContext()粘贴到ViewWillAppear上,但不起作用。什么?我做错了什么?拜托!救救我:D

    3 回复  |  直到 7 年前
        1
  •  1
  •   Saurabh Jain    7 年前

    DispatchQueue.main.async {
    tableView.reloadData()
    }
    
        2
  •  0
  •   Lou Franco    7 年前
    1. 插入项目后,应保存上下文。

    2. 视图不会自动更新。您需要在表视图上重新提取和调用重载数据。或者使用NSFetchedResultsController将表连接到CoreData查询: https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller

        3
  •  0
  •   Axel    7 年前

    获取进程/设置变量…然后。。。

    我想我应该清理用于存储数据的临时变量。所以我用了 DatabaseController.getContext().delete(identity) 然而,在SWIFT中没有必要这样做,因为这个经理可以为您做。您所需的一切-保存“n”以重新加载表/数据列表

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