2016-06-16 2 views
1

В настоящее время я использую основные данные в своем приложении. У меня есть следующие объекты: Уведомление (to-1), Люди (для многих). Субъектами являются:Операция не может быть завершена. (Ошибка какао 133021.) + swift 2

schema for Notification entity

schema for People entity

The People предприятие имеет уникальное ограничение, которое поле идентификатор. В основном я собираюсь получать уведомления (которые будут сохранены в сущности уведомления) от лиц (которые будут сохранены в сущности People). Я хочу обновить объект People, если человек с определенным идентификатором отправляет несколько уведомлений, а не создает новый (который будет дублировать).

Когда я делаю выше я получаю следующее сообщение об ошибке:

Операция не может быть завершена. (Ошибка какао 133021.)

Может кто-то, пожалуйста, помогите мне решить эту проблему. Ниже приведен мой код и пример данных, которые я пытаюсь сохранить.

let entityNotification = NSEntityDescription.entityForName("Notification", inManagedObjectContext: self.managedContext) 

    let newNotification = Notification(entity: entityNotification!, insertIntoManagedObjectContext: self.managedContext) 

    newNotification.message = data["message"] as? String 

    if let actor = data["actor"] as? [String : AnyObject] 
    { 
     let newPeople = NSEntityDescription.insertNewObjectForEntityForName("People", inManagedObjectContext: self.managedContext) as! People 

     newPeople.id = actor["id"] as? Int 
     newPeople.name = actor["name"] as? String 

     newNotification.actor = newPeople 
    } 

    if let designator = data["designator"] as? [String : AnyObject] 
    { 
     let newPeople = NSEntityDescription.insertNewObjectForEntityForName("People", inManagedObjectContext: self.managedContext) as! People 

     newPeople.id = designator["id"] as? Int 
     newPeople.name = designator["name"] as? String 

     newNotification.designator = newPeople 
    } 

    do 
    { 
     try newNotification.managedObjectContext?.save() 
    } 
    catch let error as NSError 
    { 
     print(error.localizedDescription) 
    } 

модель данных:

let notif = ["message" : "testing", 
       "actor" : ["id": 1, "name": "jim"], 
       "designator" : ["id": 2, "name": "dave"]] 

    let notif1 = ["message" : "testing 1", 
       "actor" : ["id": 1, "name": "jim21"], 
       "designator" : ["id": 2, "name": "dave"]] 
+0

Нигде в вашем коде вы не пытаетесь загрузить существующий экземпляр g 'People' – Paulw11

+0

CoreData в быстром: https://iosdevcenters.blogspot.com/2016/06/crud-operations-using-code-data-swift.html –

ответ

4

Традиционный способ решить проблему создания дубликата должен сделать выборку запроса на Person с этой идентичностью и обновлять вместо создания нового. Это также может быть лучшим вариантом для вас, тестирование скажет.

С уникальными ограничениями данные ядра могут слить для вас, но вам нужно рассказать об этом как. В настоящее время он сливается, вызывая ошибку, что не так полезно. Вам нужно установить mergePolicy по контексту на NSMergeByPropertyObjectTrumpMergePolicy, а затем попробовать его, чтобы узнать, действительно ли то, что вы хотите ...

+0

это сработало .. Большое вам спасибо – iMobileBand

Смежные вопросы