2017-02-10 19 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

相關問題