我正在用JSQMessagesVC制作一个聊天应用程序。我想要实现的是,当用户点击te聊天按钮时,它将自动显示最新的聊天会话。我认为NSUserDefault是实现这一目标的好方法。
在MessageVC中,当用户来自特定的segue时,我编写了最后一次会话加载。
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时,它会显示数据。
发布于 2015-04-21 10:07:00
我认为您应该展示更多关于NSKeyedUnarchiver块的具体代码。所以我可以向你推荐一些建议。
roomObject、userObject是否作为正确的Class未存档。喜欢
var defaults = NSUserDefaults.standardUserDefaults()
if var user = defaults.dataForKey("andereUser") {
user_1 = NSKeyedUnarchiver.unarchiveObjectWithData(user) as? PFUser } 发布于 2015-08-19 13:27:18
这是因为PFObject没有实现NSCoding协议,所以不能将其保存到NSUserDefaults中。
https://stackoverflow.com/questions/29767619
复制相似问题