加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – UNIQUE约束失败:ZTEMPORADA.Z_PK

发布时间:2020-12-14 05:40:29 所属栏目:百科 来源:网络整理
导读:我正在研究 swift和CoreData,但是在与“Temporada”进行“时间”关系时遇到问题,一个团队可以有几个赛季,一个赛季就是一个团队. 上课时间 import Foundationimport CoreData@objc(Time)class Time: NSManagedObject {@NSManaged var nome: String@NSManaged
我正在研究 swift和CoreData,但是在与“Temporada”进行“时间”关系时遇到问题,一个团队可以有几个赛季,一个赛季就是一个团队.

上课时间

import Foundation
import CoreData

@objc(Time)
class Time: NSManagedObject {

@NSManaged var nome: String
@NSManaged var temporada: NSSet

override init(entity: NSEntityDescription,insertIntoManagedObjectContext context: NSManagedObjectContext?) {
    let entity:NSEntityDescription = CoreDataManager.getEntity("Time")
    super.init(entity: entity,insertIntoManagedObjectContext: nil)
}

class func entityDescription() -> (NSEntityDescription){
    let entity:NSEntityDescription = CoreDataManager.getEntity("Time")
    return entity
}

func salvar(){
    let context:NSManagedObjectContext = CoreDataManager.getContext()
    var error:NSError?

    if (!self.inserted) {
        context.insertObject(self)
    }

    context.save(&error)

    if (error != nil){
        NSLog(error!.description)
    }
}
}

Temporada类

import Foundation
import CoreData

@objc(Temporada)
class Temporada: NSManagedObject {

@NSManaged var ano: NSNumber
@NSManaged var numeroJogos: NSNumber

//relacionamentos
@NSManaged var time: Time
@NSManaged var jogador_temporada: NSSet

override init(entity: NSEntityDescription,insertIntoManagedObjectContext context: NSManagedObjectContext?) {
    let entity:NSEntityDescription = CoreDataManager.getEntity("Temporada")
    super.init(entity: entity,insertIntoManagedObjectContext: nil)
}

class func entityDescription() -> (NSEntityDescription){
    let entity:NSEntityDescription = CoreDataManager.getEntity("Temporada")
    return entity
}

func salvar(){
    let context:NSManagedObjectContext = CoreDataManager.getContext()
    var error:NSError?

    if (!self.inserted) {
        context.insertObject(self)
    }

    context.save(&error)

    if (error != nil){
        NSLog(error!.description)
    }
}    
}

CoreDataManager

import Foundation
 import CoreData
 import UIKit

 class CoreDataManager {

class func getEntity(entidade: String) -> NSEntityDescription {
    let delegate = (UIApplication.sharedApplication()).delegate as! AppDelegate
    let context:NSManagedObjectContext? = delegate.managedObjectContext
    let description: NSEntityDescription = NSEntityDescription.entityForName(entidade,inManagedObjectContext: context!)!

    return description
}

class func getContext() -> NSManagedObjectContext {
    let delegate = (UIApplication.sharedApplication()).delegate as! AppDelegate

    return delegate.managedObjectContext!
}

class func getAllManagedObjectsFromEntity(entity: NSEntityDescription) -> (sucesso: Bool,objects: NSArray){

    let delegate = (UIApplication.sharedApplication()).delegate as! AppDelegate
    let context:NSManagedObjectContext? = delegate.managedObjectContext

    let request:NSFetchRequest = NSFetchRequest()
    request.entity = entity

    var error:NSError?
    var objects:NSArray? = context?.executeFetchRequest(request,error: &error)

    if(error == nil){
        return(true,objects!)
    }else{
        NSLog(error!.description)
        return(false,objects!)
    }
}
}

在我的ViewController中,我有两个方法,一个用于保存“时间”,另一个用于建立这种关系……

@IBAction func salvar(sender: AnyObject) {

    var time: Time  = Time(entity: Time.entityDescription(),insertIntoManagedObjectContext: nil)
    time.nome = "Cruzeiro Esporte Clube"
    time.salvar()

    NSLog("Time Salvo")
}

@IBAction func salvarTemporada(sender:AnyObject){

var time: Time?
    var temporada: Temporada = Temporada(entity: Temporada.entityDescription(),insertIntoManagedObjectContext: nil)
    temporada.ano = NSNumber(integer: 2017)
    temporada.numeroJogos = NSNumber(integer: 10)
    temporada.salvar()

    var retorno = CoreDataManager.getAllManagedObjectsFromEntity(Time.entityDescription())
    if (retorno.sucesso) {
        time = retorno.objects.objectAtIndex(0) as? Time
        NSLog("recuperado = (time?.nome)")
    }
    temporada.time = time!
    temporada.salvar()
 }

但是我收到以下错误

2015-08-23 14:36:46.718 Kickoff_CoreData[1230:37874] CoreData: error: (1555) UNIQUE constraint failed: ZTEMPORADA.Z_PK
2015-08-23 14:36:46.719 Kickoff_CoreData[1230:37874] Core Data: error: -executeRequest: encountered exception = error during SQL execution : UNIQUE constraint failed: ZTEMPORADA.Z_PK with userInfo = {
    NSFilePath = "/Users/jonathanribeiro/Library/Developer/CoreSimulator/Devices/79DFD839-4790-40C4-8E92-59EB9ADED5CD/data/Containers/Data/Application/1CEB63B6-3AA8-414D-810F-46EEDC910270/Documents/Kickoff_CoreData.sqlite";
    NSSQLiteErrorDomain = 1555;
}

谁能帮我?

我最近遇到了类似的问题.我发现我在NSManagedObjectContext中插入NSManagedObject两次,然后尝试保存它.我看到你在同一个方法中调用了两次temporada.salvar,并且由于保存实际上是异步的,因此可能会造成麻烦.希望能帮助到你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读