首次启动时,UITableView无法从Core Data获取

时间:2015-11-16 05:19:40

标签: ios swift uitableview core-data asynchronous

所以我构建了一个应用程序来从Web API读取一些JSON数据。然后它解析JSON并将结果存储到Core Data中。在我viewDidLoad的{​​{1}}中,我尝试读取JSON并将结果保存到Core Data。然后在UITableViewController中,我尝试从Core Data中获取数据并将其保存到用户数组中。

viewWillAppear

现在我有这个非常奇怪的问题,当应用程序第一次启动时(在模拟器和我的iPhone上),tableview始终为空(但是在通过下拉刷新后将填充数据)。但是当我尝试再次构建并运行它时,一切都会好起来的。 请注意,我已尝试将//parse JSON and save result to CoreData let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) person.setValuesForKeysWithDictionary([...]) do { try managedContext.save() users.append(person) } catch let error as NSError { print("Could not save \(error), \(error.userInfo)") } override func viewWillAppear(animated: Bool) { fetchData() } // fetch from Core Data and save to users array class func fetchData() { let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let managedContext = appDelegate.managedObjectContext let fetchRequest = NSFetchRequest(entityName: "User") do { let res = try managedContext.executeFetchRequest(fetchRequest) users = res as! [NSManagedObject] } catch let error as NSError { print("Could not fetch \(error), \(error.userInfo)") } } // code for refreshing func refresh() { if isConnectedToNetwork() { // run some code to read newest data from Web self.tableView.reloadData() } self.refreshControl!.endRefreshing() } 添加到self.tableView.reloadData()viewWillAppear以及viewDidLoad块内外。 有人可以告诉我发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

当你第一次在viewDidLoad中运行你的应用程序时,你从url和parse中放置了数据,然后在你的viewWillAppear中同时插入核心数据,因为你的数据还没有插入到核心数据中所以你会看到空的实现代码如下。 您可以在插入数据后调用fetchData()和self.tableView.reloadData(),这是第一次运行修复。