如何在 xmppGroupCoreDataStorageObject 中保存和获取?

How to save and fetch in xmppGroupCoreDataStorageObject?

使用 xmpp-messenger-ios,我已经创建了组并设置了它的配置并将用户添加到其中,然后我想将该组添加到 xmppGroupCoreDataStorageObject 存储中以将其列出到 OpenChatViewController table 查看。

我如何将组数据保存到 xmppGroupCoreDataStorageObject 中:

public class func addUserInCoreData(jid:String, users: Set<NSObject>) {

        let moc = OneRoster.sharedInstance.managedObjectContext_roster() as NSManagedObjectContext?
        let entity = NSEntityDescription.entityForName("XMPPGroupCoreDataStorageObject", inManagedObjectContext: moc!)
        let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: moc!)
        person.setValue(jid, forKey: "name")
        person.setValue(users, forKey: "users") // Code breaks here.
        print(moc.debugDescription)

        do{
            try moc?.save()
            let sucess = XMPPGroupCoreDataStorageObject.insertGroupName(jid, inManagedObjectContext: moc)
            print(sucess)
        }
        catch let error{
            print(error)
        }

    }

遇到异常:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString managedObjectContext]: unrecognized selector sent to instance 0x7fdf8c545e50'***

框架实现如下:

@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSSet* users;

嗯,您正在尝试将消息发送到无法响应它的对象。
查看您的异常日志:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString managedObjectContext]: unrecognized selector sent to instance 0x7fdf8c545e50'***  

managedObjectContext 消息已发送到 NSString class.
的实例 当然,它无法响应它,您正在崩溃。

首先,因为你说它在 users 行的 setValue 上崩溃,一个猜测是你的 users 集合并不真正包含类型 [=14 的对象=](但它应该)。我认为你的方法签名应该是:

public class func addUserInCoreData(jid: String, users: Set<XMPPUserCoreDataStorageObject>)

检查你调用这个函数的地方,可能你传递的不是XMPPUserCoreDataStorageObject对象,而是一些不同的类型,这是错误的。

但可能更重要的是:

let entity = XMPPGroupCoreDataStorageObject.insertGroupName(jid, inManagedObjectContext: moc)

应该被称为而不是

let entity = NSEntityDescription.entityForName("XMPPGroupCoreDataStorageObject", inManagedObjectContext: moc!)

并且 不是 try moc?.save() 之后。此方法 returns 应配置并保存的 XMPPGroupCoreDataStorageObject 对象,而不是表示保存成功的布尔值。

例如,查看本教程(注意保存到核心数据部分中的 saveName 方法): https://www.raywenderlich.com/115695/getting-started-with-core-data-tutorial

祝你好运!