Swift: 试图在一页中只显示用户数据

Swift: Trying to displaying only the users data in one page

我创建了一个个人资料页面来显示所有用户的博客 post。在我的 viewController 中,我使用 PFQueryTableViewController 来查询用户的博客。我遇到的问题是,当我 运行 我的应用程序查看当前用户的博客时,我首先看到当前用户 post 按照创建的顺序,然后在下面我看到其他人的博客来自我在 Parse 中创建的类名。当我在此页面上时,post 也在重复。我需要在我的代码中做些什么来只显示当前登录的用户博客而不是 Parse 中的所有 post 吗?我在下面粘贴了我的代码以获得更好的主意。

import UIKit
import Parse
import ParseUI

class ProfileVC: PFQueryTableViewController {

    var profilePage:NSMutableArray! = NSMutableArray()


    override init(style: UITableViewStyle, className: String!) {
        super.init(style: style, className: className)
    }


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.parseClassName = "BlogPost"
        self.textKey = "blogging"
        self.pullToRefreshEnabled = true
        self.objectsPerPage = 200

    }


    override func viewDidLoad() {
        super.viewDidLoad()

          let user = PFObject(className:"BlogPost")
           user["writer"] = PFUser.currentUser()




    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    override func objectsDidLoad(error: NSError?) {
        super.objectsDidLoad(error)
        profilePage = NSMutableArray(array: objects!)

        self.tableView.reloadData()
    }

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

            let query = PFQuery(className: "BlogPost")

        if let user = PFUser.currentUser() {
            query.whereKey("writer", equalTo: PFUser.currentUser()!.username!)
            query.addAscendingOrder("createdAt")
            query.findObjectsInBackgroundWithBlock {(objects: [AnyObject]?, error: NSError?) -> Void in

                if error == nil{
                    for object in objects!{
                        let blog : PFObject = object as! PFObject
                        self.profilePage.addObject(blog)
                    }

                    let array : NSArray = self.profilePage.reverseObjectEnumerator().allObjects
                    self.profilePage = NSMutableArray(array: array)

                    self.tableView.reloadData()

                }
            }
        }
    }

    // MARK: - Table view data source

    override func objectAtIndexPath(indexPath: NSIndexPath!) -> PFObject? {
        var obj : PFObject? = nil
        if(indexPath.row < self.profilePage.count){
            obj = self.profilePage[indexPath.row] as? PFObject
        }

        return obj
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return profilePage.count
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if indexPath.row == 0 {
            return 110
        }
        else {
            return 90
        }
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath?) -> PFTableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("PCell", forIndexPath: indexPath!) as! ProfileCell

        if let object : PFObject = self.profilePage.objectAtIndex(indexPath!.row) as? PFObject {

            cell.WritersName.text = object["writer"] as? String
            cell.WritersBlog.text = object["Blog"] as? String
            let dateCreated = object.createdAt! as NSDate
            let date = NSDateFormatter()
            dateFormat.dateFormat = "h:mm a"
            cell.timeProfile.text =  NSString(format: "%@", date.stringFromDate(dateCreated)) as String

        }
            return cell
        }



//    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

}

我发现您的代码存在一些潜在问题。

首先,每次执行查询时,您都在向同一个数组添加内容。

如果您在执行查询时初始化数组,则该数组将仅限于当前查询的结果,并且不包括以前提取的结果。

为此,请将初始化语句添加到要设置查询的部分。

if let user = PFUser.currentUser() {

    profilePage = NSMutableArray() // Reset the profile page array.

    query.whereKey("writer", equalTo: PFUser.currentUser()!.username!)
    query.addAscendingOrder("createdAt")
    ...

此外,objectsDidLoad: 中的代码可能会覆盖您通过查询创建的结果。

如果您仍然没有得到正确的结果,请尝试在其中禁用对 profilePage 的分配。

override func objectsDidLoad(error: NSError?) {
    super.objectsDidLoad(error)
    // profilePage = NSMutableArray(array: objects!)
    self.tableView.reloadData()
}