我正在研究
swift和CoreData,但是在与“Temporada”进行“时间”关系时遇到问题,一个团队可以有几个赛季,一个赛季就是一个团队.
原文链接:https://www.f2er.com/swift/318725.html上课时间
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; }
谁能帮我?