Arrays 在Swift中制作表格时,数组为空

Arrays 在Swift中制作表格时,数组为空,arrays,swift,Arrays,Swift,因此,当我在get data函数中打印两个数组时,它具有我想要的值,但是,当我创建tableview时,计数为零,两个数组都为空。在过去的几个小时里,我一直在试图解决这个问题,也尝试过NSArrays var nameArray = [String]() var textArray = [String]() var urlStart = "https://api.deckbrew.com/mtg/cards?" @IBOutlet weak var cardTitle: UILabel!

因此,当我在get data函数中打印两个数组时,它具有我想要的值,但是,当我创建tableview时,计数为零,两个数组都为空。在过去的几个小时里,我一直在试图解决这个问题,也尝试过NSArrays

var nameArray = [String]()
var textArray = [String]()

var urlStart = "https://api.deckbrew.com/mtg/cards?"


@IBOutlet weak var cardTitle: UILabel!
@IBOutlet weak var info: UITextView!

class Card: Mappable {
    var name: String?
    var store_url: String?
    var text: String?
    required init?(_ map: Map) {
    }
    func mapping(map: Map) {
        name <- map["name"]
        store_url <- map["store_url"]
        text <- map["text"]
    }
}



override func viewDidLoad() {
    super.viewDidLoad()

    func getData()
    self.tableView.reloadData()

    }


func getData() {

    let myURLString = "https://api.deckbrew.com/mtg/cards/typeahead?q=sele"
    let myURL = NSURL(string: myURLString)!

    var myCardsArray = [Card]()



    let mySession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let myDataTask = mySession.dataTaskWithURL(myURL) { (data, response, error) in
        guard error == nil else {
            print("There was error with the task")
            return
        }
        do {
            let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
            for someCard in jsonData as! NSArray{
                let card = Mapper<Card>().map(someCard)
                myCardsArray.append(card!)

                self.nameArray.append(card!.name!)
                self.textArray.append(card!.text!)

            }
        } catch {
            print("There was an error")
        }
    }

    myDataTask.resume()
}



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

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell : TableViewCell! = tableView.dequeueReusableCellWithIdentifier("Card") as! TableViewCell

    cell.cardTitle.text = nameArray[indexPath.row] as! String
   cell.cardInfo.text = textArray[indexPath.row] as! String

    return cell as TableViewCell
}




override func didReceiveMemoryWarning() {
var nameArray=[String]()
var textArray=[String]()
var urlStart=”https://api.deckbrew.com/mtg/cards?"
@IBVAR卡片标题:UILabel!
@IBV弱var信息:UITextView!
类别卡:可映射{
变量名称:字符串?
var-store\u url:String?
变量文本:字符串?
必需的初始化(umap:map){
}
func映射(映射:映射){
名称UITableViewCell
{
让单元格:TableViewCell!=tableView.dequeueReusableCellWithIdentifier(“卡”)作为!TableViewCell
cell.cardTitle.text=nameArray[indexPath.row]作为!字符串
cell.cardInfo.text=textArray[indexPath.row]as!String
返回单元格作为TableViewCell
}
重写函数didReceiveMemoryWarning(){
}
}

使用异步方法获取数据后,应在此处重新加载表视图:

 do {
            let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
            for someCard in jsonData as! NSArray{
                let card = Mapper<Card>().map(someCard)
                myCardsArray.append(card!)

                self.nameArray.append(card!.name!)
                self.textArray.append(card!.text!)
//////// here
dispatch_async(dispatch_get_main_queue()...) {
  self.tableView.reloadData()
}

            }
do{
让jsonData=try NSJSONSerialization.JSONObjectWithData(data!,选项:NSJSONReadingOptions.AllowFragments)
对于jsonData as!NSArray中的某张卡{
让card=Mapper().map(someCard)
myCardsArray.append(卡片!)
self.nameArray.append(card!.name!)
self.textary.append(card!.text!)
////////这里
dispatch\u async(dispatch\u get\u main\u queue()…){
self.tableView.reloadData()
}
}

getData的键元素运行在不同的线程中(通过
NSURLSession


这样,当表中的<代码> ReLoad DATABOS/COD>填充在<代码> VIEWDATABORE 中时,数组可能仍然是空的。您可能需要考虑在<代码> NSLLISTUCT/<代码>的闭包(这可能看起来很慢)的结尾刷新表。或者使用另一种方法确保在

重新加载数据之前填充数组

对不起,我必须进行否决表决,因为您建议的解决方案存在严重问题:在完成处理程序中(它在私有调度队列上执行),您正在访问和修改
self.nameArray
self.textArray
。这些也在主线程中同时访问,这会导致数据竞争。当应用程序更新数组时,以及当UIKit同时访问同一数组时,例如在滚动时,应用程序可能会崩溃。@SagarGovani@CouchDeveloper在他的情况下不是,这是在主线程中重新加载接口的正确方法。显示正确的方式,而不是仅仅投反对票