首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUserdefault不使用PFObject

NSUserdefault不使用PFObject
EN

Stack Overflow用户
提问于 2015-04-21 09:04:40
回答 2查看 455关注 0票数 0

我正在用JSQMessagesVC制作一个聊天应用程序。我想要实现的是,当用户点击te聊天按钮时,它将自动显示最新的聊天会话。我认为NSUserDefault是实现这一目标的好方法。

在MessageVC中,当用户来自特定的segue时,我编写了最后一次会话加载。

代码语言:javascript
复制
func loadLastMessage() {
    lastRooms = [PFObject]()
    lastUsers = [PFUser]()

    let pred = NSPredicate(format: "user1 = %@ OR user2 = %@", PFUser.currentUser(), PFUser.currentUser())

    let roomQuery = PFQuery(className: "Room", predicate: pred)
    roomQuery.orderByDescending("lastUpdate")
    roomQuery.includeKey("user1")
    roomQuery.includeKey("user2")

    roomQuery.findObjectsInBackgroundWithBlock {
        (results:[AnyObject]!, error:NSError!) -> Void in
        if error == nil{
            self.lastRooms = results as [PFObject]

            for room in self.lastRooms{
                let user1 = room.objectForKey("user1") as PFUser
                let user2 = room["user2"] as PFUser

                if user1.objectId != PFUser.currentUser().objectId {
                    self.lastUsers.append(user1)
                }

                if user2.objectId != PFUser.currentUser().objectId {
                    self.lastUsers.append(user2)
                }
            }

            let user1 = PFUser.currentUser()
            let user2 = self.lastUsers[0]

            let pred = NSPredicate(format: "user1 = %@ AND user2 = %@ OR user1 = %@ AND user2 = %@", user1, user2, user2, user1)

            let roomQuery = PFQuery(className: "Room", predicate: pred)
            roomQuery.findObjectsInBackgroundWithBlock {
                (results:[AnyObject]!, error:NSError!) -> Void in
                if error == nil{
                    let room = results.last as PFObject

                    let roomObject = NSKeyedArchiver.archivedDataWithRootObject(room)
                    NSUserDefaults.standardUserDefaults().setObject(roomObject, forKey: "kamer")

                    let userObject = NSKeyedArchiver.archivedDataWithRootObject(user2)
                    NSUserDefaults.standardUserDefaults().setObject(userObject, forKey: "andereUser")

                    NSUserDefaults.standardUserDefaults().synchronize()
                }
            }
        }
    }
}

当我尝试unarchiveObjectWithData作为PFObject时,它会让我崩溃!

-[PFUser setObject:forKey:] 0x10ac19a9a: movq 0xb709f(%rip), %rsi ; "isEqualToString:"

我认为这与铸造有关,但我仍然没有找到解决办法。当我在解压缩之前对println进行NSData时,它会显示数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-21 10:07:00

我认为您应该展示更多关于NSKeyedUnarchiver块的具体代码。所以我可以向你推荐一些建议。

  • 检查roomObjectuserObject是否作为正确的Class未存档。

喜欢

代码语言:javascript
复制
    var defaults = NSUserDefaults.standardUserDefaults()
    if var user = defaults.dataForKey("andereUser") {
        user_1 = NSKeyedUnarchiver.unarchiveObjectWithData(user) as? PFUser }  
票数 2
EN

Stack Overflow用户

发布于 2015-08-19 13:27:18

这是因为PFObject没有实现NSCoding协议,所以不能将其保存到NSUserDefaults中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29767619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档