2016-12-08 2 views
1

Используя xmpp-messenger-ios, я создал группу и установил ее конфигурацию и добавил в нее пользователей, а затем хочу добавить группу в хранилище xmppGroupCoreDataStorageObject, чтобы перечислить ее в виде таблицы OpenChatViewController.Как сохранить и извлечь в xmppGroupCoreDataStorageObject?

Как я сохранить данные группы в 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; 

ответ

0

Прежде всего, так как вы говорите, что он выходит из строя на SetValue для users линии, одна бы предположить, что ваш users набор действительно не содержит объекты типа XMPPUserCoreDataStorageObject (но это, как предполагается). Я думаю, что ваш метод подпись должна быть:

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

Проверьте место, где вы вызываете эту функцию, она может быть так, что вы передаете набор не XMPPUserCoreDataStorageObject объектов, но некоторые другой типа, который является неправильным.

Но, вероятно, еще более важно:

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

следует назвать вместо из

пусть сущности = NSEntityDescription.entityForName ("XMPPGroupCoreDataStorageObject", inManagedObjectContext: MOC!)

и не после try moc?.save(). Этот метод возвращает объект XMPPGroupCoreDataStorageObject, который должен быть сконфигурирован, а затем сохранен, а не bool, указывающий успешное сохранение.

Заканчивать, например, этот учебник (обратите внимание на метод saveName в сохранении в части Core Data): https://www.raywenderlich.com/115695/getting-started-with-core-data-tutorial

Удачи!

+0

Вы можете помочь мне решить эту проблему https://stackoverflow.com/questions/44172852/how-to-parse-xmppmessage-element-attribute-and-node-in-xmppframework-with-swif? –

1

Ну, вы пытаетесь отправить сообщение объекту, который не может ответить на него.
Посмотрите на свой журнал исключений:

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

managedObjectContext сообщение было отправлено на экземпляр класса NSString.
Конечно, он не может ответить на него, и вы получаете крах.