UItableview无法将Swift._SwiftDeferredNSArray类型的值转换为NSMutableArray

问题描述:

所以我有两个类定义矿山我的单元格:ListTableViewCell,另一个定义我的表:ListTableView。我试图从一个分析服务器拉取数据,以显示在单元格中的两个uilabels。我在这行代码中遇到错误。UItableview无法将Swift._SwiftDeferredNSArray类型的值转换为NSMutableArray

self.Data = array as! NSMutableArray 

这是给我的错误 “无法投类型的值 'Swift._SwiftDeferredNSArray'(0x107bc36b8)为 'NSMutableArray的'(0x105f7fcd0)。”

任何建议来解决这个问题。

class ListTableViewCell: UITableViewCell { 
@IBOutlet weak var name: UILabel! 
@IBOutlet weak var team: UILabel! 

} 

这是tableview。

class ListTableViewController: UITableViewController{ 

var Data: NSMutableArray = NSMutableArray() 

func loadData(){ 

    Data.removeAllObjects() 

    let findData:PFQuery = PFQuery(className: "data") 
    findData.getFirstObjectInBackground() {(objects: PFObject?, error: Error?) -> Void in 
     if !(error != nil){ 
      for object in [objects] as [PFObject?]{ 
       self.Data.add(object) 
      } 
     } 
     let array:NSArray = self.Data.reversed() as NSArray 
     self.Data = array as! NSMutableArray 
     self.tableView.reloadData() 
    } 

} 

override func viewDidAppear(_ animated: Bool) { 
    self.loadData() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

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

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

override func tableView(_ tableView: UITableView?, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell:ListTableViewCell = tableView!.dequeueReusableCell(withIdentifier: "listCell", for: indexPath) as! ListTableViewCell 

    let listData:PFObject = self.Data.object(at: indexPath.row) as! PFObject 

    cell.name.text = listData.object(forKey: "name") as? String 


    return cell 
} 


} 

编辑***

更改:

var Data = [PFObject]() 


    Data.removeAllObjects() which I changed to Data.removeAll() 
    self.Data.add(object) which I changed to aelf.Data.append(object) 

完全移除该

let array:NSArray = self.Data.reversed() as NSArray 
    self.Data = array as! NSMutableArray 

这最后一个错误,我不能修复是这个

let listData:PFObject = self.Data.object(at: indexPath.row) as! PFObject 

它抛出一个错误说[PFObject]没有成员对象。

+3

如果使用Swift数据类型而不是NS *的东西? –

我想你在开始使用Swift时遇到了同样的问题:您仍在使用Obj-C数组。尝试使用Swift Arrays!

编辑:要回答您最近编辑的问题,您正在引用对象不正确。

这是什么意思时,它会告诉你has no member object是,你说:

let listData:PFObject = self.Data.object(at: indexPath.row) as! PFObject 

这个特定组成部分:self.data.object(at: indexPath.row)

如果引用我在上面分享的链接,你会看到你引用的对象在你的swift数组中,像这样:

let listData:PFObject = self.Data[indexPath.row] as! PFObject 
+2

我想大多数人都没有意识到在Objective-C中使用NSArray是必要的,因为C数组是痛苦的,但是这是Swift,我们现在有了真正的数组,现在不需要再使用NS *了。 :) – Moritz

+0

好吧,所以我尝试了许多不同的尝试在迅速阵列广告它会抛出其他地方的错误之后。你有什么具体的建议吗? –

+0

@JaradKears不能帮助你,如果我不知道错误是什么或者它们在哪里被抛出。 – Zolnoor