2017-07-27 48 views
0

後從核心數據中消失。當我加載從CoreData項目的主要的TableView清單它通過完美展現:值加載主TableViewController

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。因爲當我加載主要TableView與列表新的ITEM基本不會出現。但是,當我重新啓動SIMULATOR時,它會顯示所有項目。

所以 1.創建新對象。

  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. 
  • 現在 - >去的TableView - >我查在viewDidLoad中和viewWillAppear中的列表。

  • 它是「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 
    
  • 牽強。但是1個新值現在缺失!?什麼??? enter image description here

  • 重新啓動SIMULATOR。它現在向我展示3件物品。但是當我重複添加項目時,它會再次發生。 enter image description here
  • MAYBE,因爲終止程序我們把它從AppDelegate保存下來?

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

    我在ViewWillAppear上粘貼了保存.saveContext(),沒有工作。 WHAAAAT?我做錯了什麼人?請!保存我:D

    +1

    請保存該項目到主隊列 –

    +0

    和重裝該表到主隊列 –

    +0

    請查看我的回答。 –

    回答

    0

    取出處理/設置變量...然後...

    我想我應該清理臨時變量來存儲數據。所以我用DatabaseController.getContext().delete(identity)保持清潔。 但是,在SWIFT中不需要這樣做,因爲此MANAGER可以爲您做到這一點。所有你需要 - SAVE'n'GO重新加載表/數據列表 就評論這個問題都解決)

    //DatabaseController.getContext().delete(identity) 
    DatabaseController.saveContext() 
    
    0
    1. 當您完成插入項目時,您應該保存上下文。

    2. 視圖不會自動更新。您需要在表格視圖中重新提取並調用reloadData。或使用NSFetchedResultsController有一個表連接到CoreData查詢:https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller

    +0

    已經完成...所有字段填寫完畢後: DatabaseController.saveContext() 還清除了內存中的新項目信息: DatabaseController.getContext()。delete身份) tableView.reloadData()也試圖在ViewDidAppear – Oleksandr

    1

    當視圖獲取從核心數據後的結果顯示在主隊列,您應該重新加載表。

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

    應該是: self.tableView.reloadData() 然而,不利於=( – Oleksandr

    +0

    嘗試將數據插入到數據庫中主隊列我也​​有面臨同樣的問題@ OleksandrZheliezniak –