【问题标题】:UItableview Could not cast value of type Swift._SwiftDeferredNSArray to NSMutableArrayUItableview 无法将 Swift._SwiftDeferredNSArray 类型的值转换为 NSMutableArray
【发布时间】:2016-10-02 04:48:59
【问题描述】:

所以我有两个类,一个定义了我的单元格:ListTableViewCell,另一个定义了我的表:ListTableView。我正在尝试从解析服务器中提取数据以显示为单元格中的两个 uilabels。我在这行代码中遇到了错误。

 self.Data = array as! NSMutableArray

它给了我错误“无法将类型 'Swift._SwiftDeferredNSArray' (0x107bc36b8) 的值转换为 'NSMutableArray' (0x105f7fcd0)。”

任何解决此问题的建议。

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

}

这是表格视图。

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] 没有成员对象。

【问题讨论】:

  • 如果你使用 Swift 数据类型而不是 NS* 东西会怎样?

标签: ios swift parsing


【解决方案1】:

我认为您在开始使用 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

【讨论】:

  • 我想大多数人没有意识到在 Objective-C 中使用 NSArray 是必要的,因为,C 数组很痛苦,但这是 Swift,我们现在有真正的数组,不需要使用NS* 了。 :)
  • 好的,所以我在 swift 数组中尝试了许多不同的尝试,之后它会在其他地方抛出错误。您有什么具体建议吗?
  • @JaradKears 无法帮助您,如果我不知道错误是什么或它们被抛出的位置。
  • 好的,所以我发布了对原始代码的编辑。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 2017-07-01
相关资源
最近更新 更多