Jquery swift do catch中未解决的已识别错误

Jquery swift do catch中未解决的已识别错误,jquery,parse-platform,error-handling,swift2,Jquery,Parse Platform,Error Handling,Swift2,感谢社区,我昨天在迁移到swift 2时解决了错误处理问题。这些更正实际上产生了一个新的错误,我不知道如何更正它。以下是在提要中显示一些图片帖子的当前代码: override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) ParseHelper.timelineRequestForCurrentUser { (result: [AnyObject]?, error: NSError?) -> Vo

感谢社区,我昨天在迁移到swift 2时解决了错误处理问题。这些更正实际上产生了一个新的错误,我不知道如何更正它。以下是在提要中显示一些图片帖子的当前代码:

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)

ParseHelper.timelineRequestForCurrentUser {
  (result: [AnyObject]?, error: NSError?) -> Void in
  self.posts = result as? [Post] ?? []

  for post in self.posts {
    do
    {
      let data = try post.imageFile?.getData()
    }
    catch
    {
      print("Error: \(error)")
      //Handle the error instead of print probably
    }
    post.image = UIImage(data: data!, scale:1.0)  --> where I get the error message "Use of unresolved identified 'data'"

  }

  self.tableView.reloadData()
}
此外,我在前面的方法中引用的ParseHelper文件中出现了一个新错误

static func timelineRequestForCurrentUser(completionBlock: PFArrayResultBlock) {
let followingQuery = PFQuery(className: "Follow")
followingQuery.whereKey("fromUser", equalTo:PFUser.currentUser()!)

let postsFromFollowedUsers = Post.query()
postsFromFollowedUsers!.whereKey("user", matchesKey: "toUser", inQuery: followingQuery)

let postsFromThisUser = Post.query()
postsFromThisUser!.whereKey("user", equalTo: PFUser.currentUser()!)

let query = PFQuery.orQueryWithSubqueries([postsFromFollowedUsers!, postsFromThisUser!])
query.includeKey("user")
query.orderByDescending("createdAt")

// 3
query.findObjectsInBackgroundWithBlock(completionBlock) --> I get an error message too here "Cannot convert value of type 'PFArrayResultBlock' to expected argument type 'PFQueryArrayResultBlock?'"

对Swift不是很有经验,但是编译器的输出是有意义的。首先,
let data
声明的范围限于do/catch的
do
块。为了让
catch
块使用数据,必须在do/catch周围的范围内重新声明数据

let data : NSData? // assuming type is NSData (my point here is about scope)
do {
    data = try post.imageFile?.getData()
} catch {
    print("Error: \(error)")
    //Handle the error instead of print probably
}
// now data is in scope here...
post.image = UIImage(data: data!, scale:1.0)
第二个问题似乎是完成块在此处声明为
PFArrayResultBlock
类型的函数参数:

static func timelineRequestForCurrentUser(completionBlock: PFArrayResultBlock)

…但parse要求将类型为
PFQueryArrayResultBlock
的块传递给
findObjectsInBackground
。看起来两者之间的区别在于数组元素的预期类型略有不同(
[PFObject]?
用于查询,而不是
[AnyObject]?

我就是这样纠正这个问题的:

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated) 
ParseHelper.timelineRequestForCurrentUser { 
(result: [PFObject]?, error: NSError?) -> Void in 
self.posts = result as? [Post] ?? [] 
self.tableView.reloadData() } }

请看,那里的共识是“不,他们不应该”!非常感谢你。替换PFObject已解决completionBlock的问题。我仍然在为post.image而挣扎。我已经尝试了您的解决方案,但仍然得到相同的错误:无法将类型为“UIImage?”的值分配给类型为“Observable”(也称为“Observable”)。代码现在看起来像这样:let data:NSData?do{data=try post.imageFile?.getData()}catch{print(“Error:(Error)”//处理错误,而不是print}post.image=UIImage(data:data!,scale:1.0),这听起来像是与OP中表达的错误不同的错误。听起来像是在post.image分配中发生的错误,并且post.image并不是完全声明为UIImage。该代码也有问题,因为它使用的getData()版本被阻塞。即使只调用一次,更不用说在循环中调用它,也会导致UI冻结。定义post.image(即从手机中选择图像时)的代码是(右上方):func takePhoto(){//实例化photo taking类,为选择photo时提供回调photoTakingHelper=photoTakingHelper(viewController:self.tabBarController!){(image:UIImage?)在let-post=post()//1-post.image.value=image!post.uploadPost()}中我应该使用另一种方法吗?