从Parse Query

时间:2015-09-17 02:05:37

标签: ios swift uitableview parse-platform

我正在尝试使用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
}

}

1 个答案:

答案 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。