当用户打开应用程序时,需要下载存储在MySQL数据库中的信息,将其保存到Core Data,然后将其显示在表视图控制器中。下载和保存数据有效,但不会将其呈现给用户。第一次显示视图控制器时,数据不会出现;只有在切换到不同的视图并返回后才能呈现自己。我已经尝试将加载数据的代码放在viewWillAppear函数(我认为它属于)和viewDidLoad函数中 - 两者都具有相同的,先前描述的结果。有人可以帮助发现我可能做错了吗?也许我的语句以错误的顺序执行?
另外,我看到的另一个奇怪的事情是当我在调试器中运行它或使用断点(也就是当我给应用程序更多时间加载时),它工作正常。当我遇到这些问题时,它只能正常运行。
查看已加载
override func viewDidLoad() {
/*This is where I would put the code to load the data. See the first
part of viewWillAppear too see what the code is.*/
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector:"viewWillAppear:", name:
UIApplicationWillEnterForegroundNotification, object: nil)
}
查看将会显示
override func viewWillAppear(animated: Bool) {
if(!defaults.boolForKey("objectivesDownloaded")) {
downloadObjectives()
defaults.setBool(true, forKey: "objectivesDownloaded")
}
defaults.synchronize()
fetchObjectives()
super.viewWillAppear(animated)
}
获取目标
func fetchObjectives() {
let fetchRequest = NSFetchRequest(entityName: "Objective")
let sortDescriptor = NSSortDescriptor(key: "logIndex", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?
if var results = fetchedResults {
objectives = results
} else {
println("Could not fetch \(error), \(error?.userInfo)")
}
tableView.reloadData()
}
答案 0 :(得分:2)
在获取数据后,您可能不会告诉您的表重新加载数据。 (当视图加载时,它最初会加载没有数据)
即。在obj-c
[yourTable reloadData]
迅速
yourTable.reloadData()
答案 1 :(得分:0)
用户必须在查看主视图之前登录,因此我在登录成功后,但在显示视图控制器之前,在登录脚本中添加了下载代码。数据现在显示在开始。
if(loginSucceeded) {
self.downloadObjectives()
self.defaults.setBool(true, forKey: "objectivesDownloaded")
let tabBarController = self.storyboard!.instantiateViewControllerWithIdentifier("tabBarController") as UIViewController
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.presentViewController(tabBarController, animated: true, completion: nil)
})
}