2016-07-05 9 views
0

私はiOSプログラミングが新しく、完了ステートメントの変数を使用する際に問題があります。私は以下のコードを含んでいますが、データ型配列に完了変数を格納すると、空の文字列しか返されないようです。完了ステートメント変数からデータを取得するときに空白が返される

注:完了データがloadSampleStockData機能で呼び出され、後にfuncのtableView(のtableView:のUITableView、cellForRowAtIndexPath indexPath:NSIndexPath)中の細胞に戻すことが想定される - >のUITableViewCellことができ任意の助け

感謝提供されます!あなたの非同期呼び出しが何もstock1...3を設定する前に

import UIKit 

class dashboardViewController: DefaultViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 
    @IBOutlet weak var balanceLabel: UILabel! 

    var stocks = [stockData]() 
    let stock = stockinfo() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.delegate = self 
     tableView.dataSource = self 
     tableView.reloadData() 
     loadSampleStockData() 
     user.newUser() // Move to login function when login and registration is implemented 

     //Sets the Balance Label on Dashboard 
     balanceLabel.text = "$" + String(format: "%.2f", user.getBalance()) 
    } 

    func loadSampleStockData() { 

     var stock1: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 
     var stock2: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 
     var stock3: stockData = stockData(name: "", askPrice: "", percentageChange: "", stockTicker: "") 

     stock.getInfo("FB") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
      stock1 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "FB") 
      stocks.append(stock1) 
     }) 
     } 

     stock.getInfo("MSFT") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
      stock2 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "MSFT") 
      stocks.append(stock2) 
     }) 
     } 

     stock.getInfo("APPL") {(name, price, change) in dispatch_async(dispatch_get_main_queue(),{ 
      stock3 = stockData(name: name, askPrice: price, percentageChange: change, stockTicker: "APPL") 
      stocks.append(stock3) 
     }) 
     } 
     print(stocks.count) 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return stocks.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cellIdentifier = "stockViewCell" 

     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! stockTableViewCell 

     let stock = stocks[indexPath.row] 

     cell.stockName.text = stock.name 
     cell.stockPercentage.text = stock.percentageChange 
     cell.stockDollarChange.text = stock.askPrice 
     cell.stockTicker.text = stock.stockTicker 

     return cell 
    } 
} 

答えて

1

stocks += [stock1, stock2, stock3]ために発生します。

stocksの作成は、完了ハンドラで行う必要があります。

+0

無礼な質問かもしれませんが、完成ハンドラ内の在庫を開始すると、別の補完ハンドラで呼び出すことができないため、可変スコープのために他の機能を呼び出すことができませんか?私が間違っているかもしれないので、コードスニペットを提供してもらえますか?あなたの助けをありがとう –

+0

ここにあるインスタンス変数など、共有状態が必要です。各補完ハンドラは配列に非同期で追加され、メインスレッドはすべて完了するまで待機します – Alexander

+0

あなたの辛抱強さに感謝し、これによって私を助けてください。私は、完了ハンドラの '株式'にデータを追加しようとしました。私は「在庫」を完成ハンドラに渡すことについてどうすればよいでしょうか。私は上記の変更を加えましたが、私はこの間違いを犯しています。もしそうなら、私にコードスニペットを提供してもらえますか?あなたの助けてくれてありがとう、私はgoogleを続行し、文書を読む –

関連する問題