我一直在Swift中创建一个应用程序,但我的TableViewController类中一直出现错误。我找不到任何方法来解决这个问题并且不断收到此错误:
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell : TextTableViewCell = tableView!.dequeueReusableCellWithIdentifier("Cell", forIndexPath : indexPath!) as TextTableViewCell
let madan : PFObject = self.timeLineData.objectAtIndex(indexPath!.row) as PFObject
cell.timestampLabel.alpha = 0
cell.usernameLabel.alpha = 0
cell.madanTextView.alpha = 0
cell.madanTextView.text = madan.objectForKey("content") as String
var dateFormatter : NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
cell.timestampLabel.text = dateFormatter.stringFromDate(madan.createdAt)
var findSender : PFQuery = PFUser.query()
findSender.whereKey("objectId", equalTo: madan.objectForKey("sender").objectId)
var i = 1
findSender.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if !error {
let user : PFUser = (objects as NSArray).lastObject as PFUser // Error here
cell.usernameLabel.text = user.username
UIView.animateWithDuration(0.5, animations: {
cell.timestampLabel.alpha = 1
cell.usernameLabel.alpha = 1
cell.madanTextView.alpha = 1
})
}
}
return cell
}
我找不到任何解决方法。
答案 0 :(得分:2)
看起来好像objects
将以nil
的形式返回。首先检查nil:
if !error {
if let actualObjects = objects {
let possibleUser = (actualObjects as NSArray).lastObject as? PFUser
if let user = possibleUser {
cell.usernameLabel.text = user.username
// ...
}
}
}
注意:我将您的as
更改为as?
。 lastObject
已经返回一个Optional,因此如果最后一个对象无法转换为PFUser,您也可以继续执行。另外,由于lastObject
可能会返回nil,因此您还需要检查nil
。
答案 1 :(得分:0)
要避免此错误,必须在声明Object时确保一个导入事物:
var isActive: Bool?
?
是很重要的,所以现在您可以随时检查nil
值,访问名为isActive
的变量,如下所示:
if isActive == nil
if let _isActive = isActive as Bool?
因此必须使用?
声明Optional
值。