gpt4 book ai didi

swift - UNIQUE 约束失败 : ZTEMPORADA. Z_PK

转载 作者:IT王子 更新时间:2023-10-29 06:23:44 24 4
gpt4 key购买 nike

我正在从事 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)
}
}
}

临时类(class)

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)
}
}
}

核心数据管理器

 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(发件人: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,并且由于保存实际上是异步的,因此可能会造成麻烦。希望对您有所帮助。

关于swift - UNIQUE 约束失败 : ZTEMPORADA. Z_PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com