Skip to content

Instantly share code, notes, and snippets.

@sandofsky
Created February 19, 2015 04:15
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sandofsky/7134b1ff90d235901254 to your computer and use it in GitHub Desktop.
Save sandofsky/7134b1ff90d235901254 to your computer and use it in GitHub Desktop.
Example of fetching messages from Parse
class ViewController: UITableViewController {
var messages:[Message]?
var timer:NSTimer?
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.refreshFired(nil)
timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: "refreshFired:", userInfo: nil, repeats: true)
}
func refreshFired(sender:AnyObject?){
let query = Message.query()
query.orderByDescending("createdAt")
query.includeKey("user")
if let newestMessage = self.messages?.first {
query.whereKey("createdAt", greaterThan: newestMessage.createdAt)
}
query.findObjectsInBackgroundWithBlock { (objects, errorOrNil) -> Void in
if let error = errorOrNil {
NSLog("Error fetching objects: \(error)")
return
}
if let messagesFromAPI = objects as [Message]!{
NSLog("Messages: \(messagesFromAPI)")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
let difference = messagesFromAPI.count
NSLog("New messages: \(difference)")
self.tableView.beginUpdates()
var indexPaths:[NSIndexPath] = Array()
for var i = 0; i < difference; i++ {
indexPaths.append(NSIndexPath(forRow: i, inSection: 0))
}
self.messages = messagesFromAPI + (self.messages ?? Array())
self.tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.Automatic)
self.tableView.endUpdates()
self.tableView.reloadData()
})
}
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("messageCell") as MessageCell
let message = self.messages![indexPath.row]
cell.messageBodyLabel.text = message.text
return cell
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messages?.count ?? 0
}
}
class MessageCell: UITableViewCell {
@IBOutlet weak var messageBodyLabel: UILabel!
}
class Message: PFObject, PFSubclassing {
@NSManaged var text:String?
@NSManaged var user:PFUser?
class func parseClassName() -> String {
return "Message"
}
override class func load() {
self.registerSubclass()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment