Swift:如何获取Parse的多个用户的姓名和照片 [英] Swift: how to get Parse's many user's name and photo

查看:66
本文介绍了Swift:如何获取Parse的多个用户的姓名和照片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的消息应用程序上有很多用户,要获取我的消息"类,我需要从他们在应用程序上的解析"配置文件中获取发件人的名字和姓氏以及配置文件图像,以便在tableView的每条消息中显示他们

我只想在tableView中显示发件人"列中包含的消息"类中的用户名,其中包含指向PFUsers(我需要其中的"first_name","last_name","profile_picture")的指针

我的用户课程

我的留言班

更新!

无法解决问题所在,如果我拒绝发布某些内容,则必须更改其他内容.这里是更新的代码:

findTimeLineDataQuery.includeKey("sender")


findTimeLineDataQuery.findObjectsInBackgroundWithBlock({
    (objects : [AnyObject]?, error : NSError?) in

    if let objects = objects where error == nil {

        var chats:(timelinechatsData: [String], chatsDate: [NSDate]) = ([], []) //date might be NSDate
        var message: (messageObjts: [String], messageSender: [String]) = ([], [])

        var datesToString: [String] {
            get {
                var stringDates:[String] = []
                let formatter = NSDateFormatter()
                formatter.dateFormat = "dd-MM-yyyy" //change the format as you wish
                for date in dates {
                    stringDates.append(formatter.stringFromDate(date))
                }
                return stringDates
            }
        }

        for singleObject in objects {

            if let user = singleObject["sender"] as? PFObject {
                let first_name = user["first_name"] as! String
                let last_name = user["last_name"] as! String

                //Cast it to how you saved it. I can't see it from the picture so I assumed you saved it as NSData
                let picture = user["picture"] as! NSData
                self.picturesProfilesArray.append(picture)
                //once you fetch the user data, you can save it in a dictionary or however you want and later call it from cellForRowAtIndex
            }



            if let stringData = singleObject["message"] as? String {

                chats.timelinechatsData.append(stringData)

                if let messageDate = singleObject.createdAt {
                    chats.chatsDate.append(messageDate!)
                }
            }

            //new
            if let messageObject = singleObject["messageObject"] as? String {
                message.messageObjts.append(messageObject)
            }

            //new senderNickname
            if let messageSender = singleObject["senderNickname"] as? String {
                message.messageSender.append(messageSender)
            }
        }

        //update self
        dispatch_async(dispatch_get_main_queue()) {

            self.timelineChatsDataArray += chats.timelinechatsData
            self.chatsDateArray += datesToString
            self.messageObjectArray += message.messageObjts
            self.messageSenderArray += message.messageSender

            self.tableView.reloadData()
        }
    }
})

更改

所以我的

var chatsDateArray : [NSDate] = []

let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
        let useDate = dateFormatter.stringFromDate(self.chatsDateArray[indexPath.row])
        cell.dateMessageLabel.text = useDate

应该成为

    var chatsDateArray : [String] = []

let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
        let useDate = String(self.chatsDateArray[indexPath.row])
        cell.dateMessageLabel.text = useDate

但这会导致:

Initialization of immutable value 'first_name' was never used; consider replacing with assignment to '_' or removing it

Initialization of immutable value 'last_name' was never used; consider replacing with assignment to '_' or removing it

这通过将var chat(chatsDate)改回字符串而消失 ,但这会导致

 Cannot convert value of type 'NSDate' to expected argument type 'String'

if let messageDate = singleObject.createdAt {
                        chats.chatsDate.append(messageDate!)
                    }
                }

解决方案

您可以使用'includeKey'访问相关类的指针值

findTimeLineDataQuery.includeKey("sender")

findTimeLineDataQuery.findObjectsInBackgroundWithBlock({
    (objects : [AnyObject]?, error : NSError?) in

    if let objects = objects where error == nil {

        var chats:(timelinechatsData: [String], chatsDate: [NSDate]) = ([], []) //date might be NSDate
        var message: (messageObjts: [String], messageSender: [String]) = ([], [])

        var datesToString: [String] {
             get {
                 var stringDates:[String] = []
                 let formatter = NSDateFormatter()
                 formatter.dateFormat = "dd-MM-yyyy" //change the format as you wish
                 for date in dates {
                     stringDates.append(formatter.stringFromDate(date))
                 }
                 return stringDates
             }
        }

        for singleObject in objects {

            if let user = singleObject["sender"] as! PFObject {
                let first_name = user["first_name"] as! String
                let last_name = user["last_name"] as! String

                //Cast it to how you saved it. I can't see it from the picture so I assumed you saved it as NSData
                let picture = user["picture"] as! NSData
                picturesProfilesArray.append(picture)
                //once you fetch the user data, you can save it in a dictionary or however you want and later call it from cellForRowAtIndex
            }



            if let stringData = singleObject["message"] as? String {

                chats.timelinechatsData.append(stringData)

                if let messageDate = singleObject.createdAt {
                    chats.chatsDate.append(messageDate)
                }
            }

            //new
            if let messageObject = singleObject["messageObject"] as? String {
                message.messageObjts.append(messageObject)
            }

            //new senderNickname
            if let messageSender = singleObject["senderNickname"] as? String {
                message.messageSender.append(messageSender)
            }
        }

        //update self
        dispatch_async(dispatch_get_main_queue()) {

            self.timelineChatsDataArray += chats.timelinechatsData
            self.chatsDateArray += datesToString
            self.messageObjectArray += message.messageObjts
            self.messageSenderArray += message.messageSender

            self.tableView.reloadData()
        }
    }
})

I have a bunch of users on my message app, fetching my "messages" class I need to get sender's first and last name and profile image from their Parse profile on my app in order to show them in each message on the tableView.

I just want to show in tableView the name of users in class "messages" contained in the column "sender" wich contains pointers to PFUsers (of which I need "first_name", "last_name", "profile_picture")

my users class

my message class

update!

can't get where is the problem, if I downCast something, something else must be changed. here the updated code:

findTimeLineDataQuery.includeKey("sender")


findTimeLineDataQuery.findObjectsInBackgroundWithBlock({
    (objects : [AnyObject]?, error : NSError?) in

    if let objects = objects where error == nil {

        var chats:(timelinechatsData: [String], chatsDate: [NSDate]) = ([], []) //date might be NSDate
        var message: (messageObjts: [String], messageSender: [String]) = ([], [])

        var datesToString: [String] {
            get {
                var stringDates:[String] = []
                let formatter = NSDateFormatter()
                formatter.dateFormat = "dd-MM-yyyy" //change the format as you wish
                for date in dates {
                    stringDates.append(formatter.stringFromDate(date))
                }
                return stringDates
            }
        }

        for singleObject in objects {

            if let user = singleObject["sender"] as? PFObject {
                let first_name = user["first_name"] as! String
                let last_name = user["last_name"] as! String

                //Cast it to how you saved it. I can't see it from the picture so I assumed you saved it as NSData
                let picture = user["picture"] as! NSData
                self.picturesProfilesArray.append(picture)
                //once you fetch the user data, you can save it in a dictionary or however you want and later call it from cellForRowAtIndex
            }



            if let stringData = singleObject["message"] as? String {

                chats.timelinechatsData.append(stringData)

                if let messageDate = singleObject.createdAt {
                    chats.chatsDate.append(messageDate!)
                }
            }

            //new
            if let messageObject = singleObject["messageObject"] as? String {
                message.messageObjts.append(messageObject)
            }

            //new senderNickname
            if let messageSender = singleObject["senderNickname"] as? String {
                message.messageSender.append(messageSender)
            }
        }

        //update self
        dispatch_async(dispatch_get_main_queue()) {

            self.timelineChatsDataArray += chats.timelinechatsData
            self.chatsDateArray += datesToString
            self.messageObjectArray += message.messageObjts
            self.messageSenderArray += message.messageSender

            self.tableView.reloadData()
        }
    }
})

changes

so my

var chatsDateArray : [NSDate] = []

and

let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
        let useDate = dateFormatter.stringFromDate(self.chatsDateArray[indexPath.row])
        cell.dateMessageLabel.text = useDate

should become

    var chatsDateArray : [String] = []

let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
        let useDate = String(self.chatsDateArray[indexPath.row])
        cell.dateMessageLabel.text = useDate

but this causes:

Initialization of immutable value 'first_name' was never used; consider replacing with assignment to '_' or removing it

Initialization of immutable value 'last_name' was never used; consider replacing with assignment to '_' or removing it

this disappears by changing var chat (chatsDate) back to string , but this causes

 Cannot convert value of type 'NSDate' to expected argument type 'String'

on

if let messageDate = singleObject.createdAt {
                        chats.chatsDate.append(messageDate!)
                    }
                }

解决方案

You can use 'includeKey' to access pointer values of related classes

findTimeLineDataQuery.includeKey("sender")

findTimeLineDataQuery.findObjectsInBackgroundWithBlock({
    (objects : [AnyObject]?, error : NSError?) in

    if let objects = objects where error == nil {

        var chats:(timelinechatsData: [String], chatsDate: [NSDate]) = ([], []) //date might be NSDate
        var message: (messageObjts: [String], messageSender: [String]) = ([], [])

        var datesToString: [String] {
             get {
                 var stringDates:[String] = []
                 let formatter = NSDateFormatter()
                 formatter.dateFormat = "dd-MM-yyyy" //change the format as you wish
                 for date in dates {
                     stringDates.append(formatter.stringFromDate(date))
                 }
                 return stringDates
             }
        }

        for singleObject in objects {

            if let user = singleObject["sender"] as! PFObject {
                let first_name = user["first_name"] as! String
                let last_name = user["last_name"] as! String

                //Cast it to how you saved it. I can't see it from the picture so I assumed you saved it as NSData
                let picture = user["picture"] as! NSData
                picturesProfilesArray.append(picture)
                //once you fetch the user data, you can save it in a dictionary or however you want and later call it from cellForRowAtIndex
            }



            if let stringData = singleObject["message"] as? String {

                chats.timelinechatsData.append(stringData)

                if let messageDate = singleObject.createdAt {
                    chats.chatsDate.append(messageDate)
                }
            }

            //new
            if let messageObject = singleObject["messageObject"] as? String {
                message.messageObjts.append(messageObject)
            }

            //new senderNickname
            if let messageSender = singleObject["senderNickname"] as? String {
                message.messageSender.append(messageSender)
            }
        }

        //update self
        dispatch_async(dispatch_get_main_queue()) {

            self.timelineChatsDataArray += chats.timelinechatsData
            self.chatsDateArray += datesToString
            self.messageObjectArray += message.messageObjts
            self.messageSenderArray += message.messageSender

            self.tableView.reloadData()
        }
    }
})

这篇关于Swift:如何获取Parse的多个用户的姓名和照片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆