下载初始应用程序数据

时间:2014-12-25 07:35:36

标签: ios core-data swift

当用户打开应用程序时,需要下载存储在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()
}

2 个答案:

答案 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)
    })
}