我被困在这个问题上,并且我为这个问题尝试了不同的'修复',但似乎没有任何工作。代码编号: 类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作为后端。
** **切勿使用斯威夫特'NSMutable ...'集合类型。你扔掉重要的类型信息,这会导致你所有的问题。 'partyData'应该是'var partyData = [PFObject]()'(非可选!) – vadian
所以我应该只使用一个正常的数组? – Jbarfield101
你应该使用一个Swift'Array' – vadian