简单地等待来自异步线程的值

时间:2016-07-09 12:24:33

标签: swift uiviewcontroller grand-central-dispatch viewdidload viewdidappear

我有两种基本方法 - viewDidLoadviewDidAppear。根据我的App理念,当视图控制器加载时,它从base获取数据并开始使用一些谓词对其进行排序。提取过程很长,所以我将它发送到全局队列。当我的视图出现时,它显然没有从数组中获取值(在load方法中编译)并崩溃。所以我需要viewDidAppear等待至少一个对象被附加到数组。 信号量或临时值? 提前谢谢!

P.S。数组中的每个项表示具有组成UI的数据的struct。用户与此UI进行交互,因此必须使用数组中的第一项加载一次。要切换到下一个项目,用户只需单击“下一步”,UI将根据数组中的下一项进行更改。这就是为什么我希望数据在后台获取并允许用户立即工作。 (不可能立即跳到第5,10或第1001个元素,在用户获取这些页码之前有足够的时间来获取数据)

P.P.S仍然没有正确的决定:(

1 个答案:

答案 0 :(得分:0)

您应该使用嵌套的调度块,如下所示:

class SecondViewController: UIViewController, UITableViewDataSource,  UITableViewDelegate {
 @IBOutlet var tableView: UITableView!

 //Define Days Of The Week

 let calendar = NSCalendar.currentCalendar()
 let today = NSDate()

 let AddOneDay = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day,
     value: 1,
     toDate: NSDate(),
     options: NSCalendarOptions(rawValue: 0))

 let AddTwoDays = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day,
     value: 2,
     toDate: NSDate(),
     options: NSCalendarOptions(rawValue: 0))

 let AddThreeDays = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day,
     value: 3,
     toDate: NSDate(),
     options: NSCalendarOptions(rawValue: 0))

 let AddFourDays = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day,
     value: 4,
     toDate: NSDate(),
     options: NSCalendarOptions(rawValue: 0))

 let AddFiveDays = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day,
     value: 5,
     toDate: NSDate(),
     options: NSCalendarOptions(rawValue: 0))

 let AddSixDays = NSCalendar.currentCalendar().dateByAddingUnit(
     .Day,
     value: 6,
     toDate: NSDate(),
     options: NSCalendarOptions(rawValue: 0))

 func convertDaysFormater(date: String) -> String {
     let daysFormatter = NSDateFormatter()
     daysFormatter.dateFormat = "EEEE"
     daysFormatter.locale = NSLocale(localeIdentifier: "pl_PL")
     let convertedOneDay = daysFormatter.stringFromDate(AddOneDay!)
     let convertedTwoDays = daysFormatter.stringFromDate(AddTwoDays!)
     let convertedThreeDays = daysFormatter.stringFromDate(AddThreeDays!)
     let convertedFourDays = daysFormatter.stringFromDate(AddFourDays!)
     let convertedFiveDays = daysFormatter.stringFromDate(AddFiveDays!)
     let convertedSixDays = daysFormatter.stringFromDate(AddSixDays!)

     return convertedOneDay
     return convertedTwoDays
     return convertedThreeDays
     return convertedFourDays
     return convertedFiveDays
     return convertedSixDays

 }

 // Define Array

 let textCellIdentifier = "TextCell"

 let swiftBlogs = [convertedOneDay, convertedTwoDays, etc...]