由于"Swift._NSContiguousString"到"PFObject"而终止了应用程序 [英] Terminating App due to 'Swift._NSContiguousString' to 'PFObject'

查看:79
本文介绍了由于"Swift._NSContiguousString"到"PFObject"而终止了应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这个问题上感到困惑,并且为此问题尝试了不同的修复"方法,但是似乎没有任何效果.参考代码: 类FindAParty:UITableViewController {

I'm Stuck on this issue and I have tried different 'fixes' for this issue however nothing seems to work. Code for Ref: class FindAParty:UITableViewController{

    var partyData:NSMutableArray! = NSMutableArray()
        //var user:NSMutableArray = NSMutableArray()

        override init(style: UITableViewStyle){
            super.init(style: style)

        }

        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            //fatalError("init(coder:) has not been implemented")

        }


        @IBAction func loadData(){
            print ("Load Data went through")
            partyData.removeAllObjects()
            print ("Remove ALL Objeccts")
            let findPartyData:PFQuery = PFQuery(className: "Party")
            print("PFQuery...")
            findPartyData.findObjectsInBackground{
                (objects:[PFObject]?, error:Error?)->Void in

                if error != nil {

                    print("Error")


                }else{

                    for object in objects!{

                        let party:PFObject = object as PFObject
                        self.partyData.add("party")
                        }

                    let array:NSArray = self.partyData.reverseObjectEnumerator().allObjects as NSArray
                    self.partyData = NSMutableArray(array: array)

                    self.tableView.reloadData()

                }
            }
        }

        override func viewDidAppear(_ animated: Bool) {
            self.loadData()
            print("View Did Appear")
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            print("ViewDidLoad")
            //self.loadData()
            // Uncomment the following line to preserve selection between presentations
            // self.clearsSelectionOnViewWillAppear = false

            // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
            // self.navigationItem.rightBarButtonItem = self.editButtonItem
        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }

        // #pragma mark - Table view data source
        override func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return partyData.count
        }


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

//Error Happens Below
            let party:PFObject = self.partyData.object(at: indexPath.row) as! PFObject





            cell.typeOfPartyLabel.alpha = 0
            cell.timeOfPartyLabel.alpha = 0
            cell.usernameLabel.alpha = 0

            cell.typeOfPartyLabel.text = party.object(forKey: "partyTitle") as? String
            cell.timeOfPartyLabel.text = party.object(forKey: "partyTime") as? String
            cell.usernameLabel.text = party.object(forKey: "Username") as? String

           // var dataFormatter:NSDateFormatter = NSDateFormatter()
            //dataFormatter.dateFormat = "yyyy-MM-dd HH:mm"
            //cell.timestampLabel.text = dataFormatter.stringFromDate(sweet.createdAt)

            let findUser:PFQuery = PFUser.query()!
            findUser.whereKey("objectId", equalTo: party.object(forKey: "Username")!)



            findUser.findObjectsInBackground {
                (objects:[PFObject]?, error: Error?) -> Void in // Changes NSError to Error
                if error == nil{

                    let user:PFUser = (objects)!.last as! PFUser
                    cell.usernameLabel.text = user.username

                    UIView.animate(withDuration: 0.5, animations: {
                        cell.typeOfPartyLabel.alpha = 1
                        cell.timeOfPartyLabel.alpha = 1
                        cell.usernameLabel.alpha = 1
                    })
                }
            }


            return cell
        }}

有人建议更改:let party:PFObject = self.partyData.object(at: indexPath.row) as! PFObject 到:

Someone recommended changing : let party:PFObject = self.partyData.object(at: indexPath.row) as! PFObject to :

let party = self.partyData.object(at: indexPath!.row)

但是,这并没有解决它,我对如何成功修复应用程序构建以及它的所有其他方面都感到困惑,但是这是唯一失败的部分.我正在使用Parse和Amazon作为后端.

However this did not fix it and I am at a loss to how I should fix it the app build successfully and every other aspect of it runs however this is the only part that fails. I am using Parse and Amazon as my backend.

推荐答案

声明数据源数组

var partyData = [PFObject]()

并将loadData()更改为

    @IBAction func loadData(){
        print ("Load Data went through")
        partyData.removeAll()
        print ("Remove ALL Objeccts")
        let findPartyData = PFQuery(className: "Party")
        print("PFQuery...")
        findPartyData.findObjectsInBackground {
            (objects:[PFObject]?, error:Error?)->Void in

            if error != nil {
                print(error!)
            } else{
                if let objects = objects {
                    self.partyData = objects.reversed()
                }
                DispatchQueue.main.async {
                   self.tableView.reloadData()
                }
            }
        }
    }

并获得一行:

let party = self.partyData[indexPath.row]

最后替换为cellForRowAt

if error == nil {
   let user:PFUser = (objects)!.last as! PFUser

使用

if users = objects as? [PFUser], !users.isEmpty {
   let user = users.last!

这篇关于由于"Swift._NSContiguousString"到"PFObject"而终止了应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆