尝试在viewWillAppear中重载Data()

时间:2019-04-17 20:31:42

标签: ios swift uitableview tableview

我有一个tabBarController,在其中一个标签中,我可以选择“收藏夹”标签中要包含的任何文档。

因此,当我转到“收藏夹”选项卡时,应该会显示“收藏夹”文档。

我从CoreData提取了喜欢的文档后称重装:

override func viewWillAppear(_ animated: Bool) {

    languageSelected = UserDefaults().string(forKey: "language")!

    self.title = "favourites".localized(lang: languageSelected)

    // Sets the search Bar in the navigationBar.
    let search = UISearchController(searchResultsController: nil)
    search.searchResultsUpdater = self
    search.obscuresBackgroundDuringPresentation = false
    search.searchBar.placeholder = "searchDocuments".localized(lang: languageSelected)
    navigationItem.searchController = search
    navigationItem.hidesSearchBarWhenScrolling = false

    // Request the documents and reload the tableView.
    fetchDocuments()

    self.tableView.reloadData()

}

fetchDocuments()函数如下:

func fetchDocuments() {
    print("fetchDocuments")
    // We make the request to the context to get the documents we want.

    do {

        documentArray = try context.fetchMOs(requestedEntity, sortBy: requestedSortBy, predicate: requestedPredicate)
        ***print(documentArray) // To test it works ok.***
        // Arrange the documentArray per year using the variable documentArrayPerSection.
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy"

        for yearSection in IndexSections.sharedInstance.allSections[0].sections {

            let documentsFilteredPerYear = documentArray.filter { document -> Bool in
                return yearSection == formatter.string(from: document.date!)
            }

            documentArrayPerSection.append(documentsFilteredPerYear)

        }

    } catch {

        print("Error fetching data from context \(error)")

    }

}

从语句print(documentArray)中,我看到该函数更新了内容。但是,tableView中没有重新加载文档。

如果我关闭该应用程序并再次将其打开,则它将更新。

不知道我在做什么错!!

2 个答案:

答案 0 :(得分:2)

我假设在完成所有数据处理之前调用Private Sub myItem_close(Cancel As Boolean) Dim F As Outlook.MAPIFolder EventsDisable = True If TypeOf myItem Is Outlook.mailitem Then Set F = myItem.Parent If F = Session.GetDefaultFolder(olFolderInbox) Then Set F = Application.Session.PickFolder myItem.Move F End If EventsDisable = False End Sub 。要解决此问题,您必须在获取完成后调用完成处理程序,然后才能更新tableView。

reloadData()

并这样称呼它:

func fetchDocuments(_ completion: @escaping () -> Void) {
   do {
      // Execute all the usual fetching logic
      ...

      completion()
   }
   catch { ... }
}


祝你好运:)

答案 1 :(得分:2)

问题是您总是要追加到documentArrayPerSection却从未清除它,所以我想数组总是越来越大,但是只使用了tableView的数据源所请求的数组的开头。我自己去过几次。