所以我构建了一个应用程序来从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
块内外。
有人可以告诉我发生了什么事吗?
答案 0 :(得分:1)
当你第一次在viewDidLoad中运行你的应用程序时,你从url和parse中放置了数据,然后在你的viewWillAppear中同时插入核心数据,因为你的数据还没有插入到核心数据中所以你会看到空的实现代码如下。 您可以在插入数据后调用fetchData()和self.tableView.reloadData(),这是第一次运行修复。