2016-07-05 3 views
0

저는 iOS 프로그래밍이 처음인데 완성 문에서 변수를 사용할 때 문제가 있습니다. 아래 코드를 포함 시켰습니다. 데이터 유형 배열에 완료 변수를 저장할 때 빈 문자열 만 반환하는 것 같습니다.완료 문 변수에서 데이터를 검색 할 때 공백이 반환됩니다.

참고 : 완료 데이터는 loadSampleStockData 함수를 호출하고 나중에 FUNC에있는 tableView 세포 (있는 tableView : jQuery과, 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에 가서 문서를 읽으십시오 –