我正在努力研究如何使用parse实现分区表视图。如果不加载所需的名称,我可以正确地分割表视图。但是,当我使用parse时,名称没有及时加载,因此由于是异步的,因此会丢失。
当我在queryfriends()中重新加载表时,它不会出现。我的理论是这张桌子不再被分割了。
我怎样才能再做一次桌子部分?
或者有人有什么想法吗?
谢谢你的帮助

import UIKit
import Parse
import Foundation

class MyFriendsTableView: UITableViewController, UITableViewDataSource, UITableViewDelegate{


var names:[String] = []

/*var names: [String] = [
    "AAAA",
    "Clementine",
    "Bessie",
    "Yolande",
    "Tynisha",
    "Ellyn",
    "Trudy",
    "Fredrick",
    "Letisha",
    "Ariel",
    "Bong",
    "Jacinto",
    "Dorinda",
    "Aiko",
    "Loma",
    "Augustina",
    "Margarita",
    "Jesenia",
    "Kellee",
    "Annis",
    "Charlena",
    "!#@",
    "@@@"
]*/




override func viewDidLoad() {
    super.viewDidLoad()



    self.refreshControl = UIRefreshControl()
    self.refreshControl?.attributedTitle = NSAttributedString(string: "Pull to refresh")
    self.refreshControl?.addTarget(self, action: "queryFriends", forControlEvents: UIControlEvents.ValueChanged)
    self.tableView.addSubview(refreshControl!)





}


override func viewDidAppear(animated: Bool) {

    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

    queryFriends()




}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func queryFriends() {
    let currentUser = PFUser.currentUser()?.username
    let predicate = NSPredicate(format: "status = 'Friends' AND fromUser = %@ OR status = 'Friends' AND toUser = %@", currentUser!, currentUser!)
    var query = PFQuery(className: "FriendRequest", predicate: predicate)
    var friends:[String] = []
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {
            if let objects = objects as? [PFObject] {
                for object in objects {
                    if object["toUser"] as? String != currentUser {
                        friends.append(object["toUser"] as! String)

                    } else if object["fromUser"] as? String != currentUser {
                        friends.append(object["fromUser"] as! String)

                    }
                }

            }

        } else {
            // Log details of the failure
            println("Error: \(error!) \(error!.userInfo!)")
        }
        self.names = friends
        self.tableView.reloadData()
        self.refreshControl?.endRefreshing()
    }
}



/* type to represent table items
`section` stores a `UITableView` section */
class User: NSObject {
    let name: String
    var section: Int?

    init(name: String) {
        self.name = name
    }
}

// custom type to represent table sections
class Section {
    var users: [User] = []

    func addUser(user: User) {
        self.users.append(user)
    }
}


// `UIKit` convenience class for sectioning a table
let collation = UILocalizedIndexedCollation.currentCollation()
    as! UILocalizedIndexedCollation

// table sections
var sections: [Section] {
    // return if already initialized
    if self._sections != nil {
        return self._sections!
    }

    // create users from the name list
    var users: [User] = names.map { name in
        var user = User(name: name)
        user.section = self.collation.sectionForObject(user, collationStringSelector: "name")
        return user
    }

    // create empty sections
    var sections = [Section]()
    for i in 0..<self.collation.sectionIndexTitles.count {
        sections.append(Section())
    }

    // put each user in a section
    for user in users {
        sections[user.section!].addUser(user)
    }

    // sort each section
    for section in sections {
        section.users = self.collation.sortedArrayFromArray(section.users, collationStringSelector: "name") as! [User]
    }

    self._sections = sections

    return self._sections!

}
var _sections: [Section]?

// table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.sections.count
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.sections[section].users.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let user = self.sections[indexPath.section].users[indexPath.row]
        let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel!.text = user.name
        return cell
}

/* section headers
appear above each `UITableView` section */
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        // do not display empty `Section`s
        if !self.sections[section].users.isEmpty {
            return self.collation.sectionTitles[section] as? String
        }
        return ""
}

/* section index titles
displayed to the right of the `UITableView` */
override func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject] {
        return self.collation.sectionIndexTitles
}

override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
        return self.collation.sectionForSectionIndexTitleAtIndex(index)
}

}

最佳答案

您可以尝试清除_sections中的queryFriends

self._sections = nil
self.names = friends
self.tableView.reloadData()
self.refreshControl?.endRefreshing()

09-12 13:13