我正在尝试使用Parse作为后端在我的应用程序中添加注释功能。
因为每次用户开始与某人聊天时,必须转到Parse“Recent” - 类并且必须检查Arraylist匹配,如果该行包含匹配,那么它必须返回预期值并且我将它保存在共享首选项中,否则我们在代码本身中创建一个值并保存它。
解析查询工作正常并且传递了预期值
有时,它会延迟,而不是总是如此。我检查的问题是存储从解析中接收值的数组。当我计算数组值时,它显示为1,1,3,4,5,5,7。 用户输入时,tableview不会显示该值,并点按上传评论按钮。如果用户再次点击,因为他没有看到他的评论,它将为他显示两条评论,因为异步。
我想使用活动指示器(我只使用webView练习),以便用户可以识别该评论正在上传。但我不知道我必须使用哪种方法以及我必须为其编写代码。
哪种方式是此问题的最佳使用指标, 还有另一种解决这个问题的方法吗?
这是我的代码
class comment: UIViewController, UITableViewDelegate {
@IBOutlet weak var tableViewComment: UITableView!
@IBOutlet weak var textFieldComment: UITextField!
var commentArray = [String]()
var parentObjectID = String()
var userIdArray = [String]()
@IBAction func uploadComment(sender: AnyObject) {
var numberOfComment : Int = commentArray.count
self.tableViewComment.reloadData()
let comment = PFObject(className:"Comment")
comment["createdBy"] = PFUser.currentUser()
comment["comment"] = "" + textFieldComment.text
comment["parent"] = parentObjectID
comment["username"] = PFUser.currentUser()?.username
comment.saveInBackground()
// println("시작 : \(commnetArray.count)")
let numberOfCommentTwo = commentArray.count
commentArray = []
// println(" = \(numberOfComment), \(commentArray.count)")
queryComment()
if numberOfComment == numberOfCommentTwo {
println("good")
}else{
println("bad = \(numberOfComment), \(commentArray.count)")
}
//인터넷이 느린지역 바로 업로드 되지 않는 문제
//타이머를 넣어 해결 혹은 파스 서버와 대조 해보고 에러 메세지 줘야함
//혹은 클릭 하면 어레이가 늘어나는걸 확인해야함 = 어레이 안의 벨류 숫자가 한번 클릭할때 하나 늘어나면 오케이
self.tableViewComment.reloadData()
textFieldComment.text = ""
}
override func viewDidLoad() {
super.viewDidLoad()
queryComment()
}
func queryComment() {
let queryComments = PFQuery(className: "Comment")
queryComments.whereKey("parent", equalTo: "\(parentObjectID)")
queryComments.orderByAscending("createdAt")
queryComments.findObjectsInBackgroundWithBlock {
(comments: [AnyObject]?, error: NSError?) -> Void in
// comments now contains the comments for myPost
if error == nil {
//에러없는 경우
for post in comments! {
self.commentArray.append(post["comment"] as! String)
self.userIdArray.append(post["username"] as! String)
self.tableViewComment.reloadData()
// println("시작 : \(self.commentArray)")
//println("시작 : \(self.numberOfComment)")
self.tableViewComment.reloadData()
}
}else{
println(error)
}
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return commentArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! UITableViewCell
cell.textLabel?.text = self.commentArray[indexPath.row]
cell.detailTextLabel!.text = "Id:" + self.userIdArray[indexPath.row]
return cell
}
}
答案 0 :(得分:1)
您可以使用活动指示器或进度HUD来阻止用户上传两次。您还应该在上传开始后清除文本字段(类似于文本消息),这样用户就无法再次推送发送。
我强烈建议您使用something like JGProgressHUD,这将使您轻松完成所有这些工作。例如,您需要添加以显示HUD的所有内容如下。
var progressHUD: JGProgressHUD = JGProgressHUD(style: JGProgressHUDStyle.ExtraLight)
// Show Progress HUD
progressHUD.position = JGProgressHUDPosition.Center
progressHUD.animation = JGProgressHUDFadeZoomAnimation()
progressHUD.showInView(self.view)
然后将其删除
// Dismiss progress HUD
self.progressHUD.dismissAnimated(true)
在@IBAction func uploadComment
开头显示HUD。同时更改comment.saveInBackground()
以使用comment.saveInBackgroundWithBlock
并在保存的完成块中关闭HUD。