Jquery swift do catch中未解决的已识别错误
感谢社区,我昨天在迁移到swift 2时解决了错误处理问题。这些更正实际上产生了一个新的错误,我不知道如何更正它。以下是在提要中显示一些图片帖子的当前代码: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
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()}中我应该使用另一种方法吗?