2017-02-10 44 views
0

我被困在这个问题上,并且我为这个问题尝试了不同的'修复',但似乎没有任何工作。代码编号: 类FindAParty:的UITableViewController {由于'Swift._NSContiguousString'到'PFObject'而终止应用程序

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 到:

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

然而,这并没有解决它,我很茫然,我应该如何解决该应用程序可以成功构建,并可以运行其他任何方面,但这是唯一失败的部分。我使用Parse和Amazon作为后端。

+0

** **切勿使用斯威夫特'NSMutable ...'集合类型。你扔掉重要的类型信息,这会导致你所有的问题。 'partyData'应该是'var partyData = [PFObject]()'(非可选!) – vadian

+0

所以我应该只使用一个正常的数组? – Jbarfield101

+0

你应该使用一个Swift'Array' – vadian

回答

1

声明数据源阵列

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

0最后替换

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

这条线现在应该怎么做,它说成员没有任何客体。 '让派对:PFObject = self.partyData.object(at:indexPath.row)as! PFObject' – Jbarfield101

+0

我更新了答案。你看到大大减少的语法? – vadian

+0

我在哪里声明用户对象,因为当我替换该代码时,它给我一个错误 – Jbarfield101

相关问题