rapide - changement d'objet après appel de fonction
j'ai un objet en utilisant le code ci-dessous
name = "Toma"
let toma = setupPet(name, family: "Hawn", stage: 1, imageName: "hawn_toma", imageNamef: "", imageNameEgg: "hawn_egg", hatchEXP: 5000, desc: "", eggDesc: "", rarity: "Common")
name = "Hawn"
let hawn = setupPet(name, family: "Hawn", stage: 2, imageName: "hawn", imageNamef: "", imageNameEgg: "hawn_egg", hatchEXP: 5000, desc: "", eggDesc: "", rarity: "Common")
hawn.basePet = toma
let tomaToHawn = NSEntityDescription.insertNewObjectForEntityForName("Evolution", inManagedObjectContext: self.appData.moc) as! Evolution
tomaToHawn.evolveTo = hawn
tomaToHawn.howEvolve = "Level"
tomaToHawn.evolveValue = "10"
NSLog("\(tomaToHawn.evolveTo!.name)")
toma.addEvolveToObject(tomaToHawn)
NSLog("\(tomaToHawn.evolveTo!.name)")
Maintenant le résultat des deux NSLogs donne des valeurs différentes,
en option ("Hawn")
Facultatif ("Toma")
Il a changé après l'appel addEvolveToObject La méthode consiste
class Pet: NSManagedObject {
func addEvolveToObject(value:Evolution) {
let items = self.mutableSetValueForKey("evolveTo");
items.addObject(value)
}
}
J'ai aussi essayé l'ajouter évoluer en utilisant @NSManaged func mais obtenir le même résultat. Une fois l'objet ajouté au nsset, evolveto est défini sur l'animal de compagnie auquel il est ajouté. Les autres champs conservent les données correctes
Modifier J'ai réduit le problème à la méthode addEvolveToObject. Si j'imprime en utilisant NSLog ("Pet CD: (value.evolveTo? .name)") avant l'appel items.addobject il donne la valeur correcte, mais si j'imprime le même après l'instruction, il donne une valeur différente
IE:
func addEvolveToObject(value:Evolution) {
NSLog("********************************************************************")
let items = self.mutableSetValueForKey("evolveTo");
NSLog("Pet CD: \(value.evolveTo?.name)")
items.addObject(value)
NSLog("Pet CD: \(value.evolveTo?.name)")
NSLog("********************************************************************")
}
donne
Pet CD: En option ("Mel")
Pet CD: En option ("Joan")
Si je commente la ligne d'objet COMBINEZ NSLogs donnent le résultat correct
Codes de classe: - Permet de définir simplement la base de données importation UIKit importation CoreData
class Setup: NSObject {
let appData : AppData = AppData.sharedInstance
func setup() {
// Hawn
name = "Toma"
let toma = setupPet(name, family: "Hawn", stage: 1, imageName: "hawn_toma", imageNamef: "", imageNameEgg: "hawn_egg", hatchEXP: 5000, desc: "", eggDesc: "", rarity: "Common")
name = "Hawn"
let hawn = setupPet(name, family: "Hawn", stage: 2, imageName: "hawn", imageNamef: "", imageNameEgg: "hawn_egg", hatchEXP: 5000, desc: "", eggDesc: "", rarity: "Common")
hawn.basePet = toma
let tomaToHawn = NSEntityDescription.insertNewObjectForEntityForName("Evolution", inManagedObjectContext: self.appData.moc) as! Evolution
tomaToHawn.evolveTo = hawn
tomaToHawn.howEvolve = "Level"
tomaToHawn.evolveValue = "10"
toma.addEvolveToObject(tomaToHawn)
appData.saveContext()
}
func setupPet(name : String, family : String, stage : NSNumber, imageName : String, imageNamef : String, imageNameEgg : String, hatchEXP : NSNumber, desc : String, eggDesc : String, rarity : String) -> Pet {
let pet : Pet = NSEntityDescription.insertNewObjectForEntityForName("Pet",inManagedObjectContext: appData.moc) as! Pet
pet.name = name
pet.family = family
pet.stage = stage
pet.imageName = imageName
pet.imageNamef = imageNamef
pet.imageNameEgg = imageNameEgg
pet.hatchEXP = hatchEXP
pet.rarity = rarity
pet.desc = desc
pet.eggDesc = eggDesc
return pet
}
}
animaux - propriétés de données de base classe
import Foundation
import CoreData
extension Pet {
@NSManaged var desc: String?
@NSManaged var eggDesc: String?
@NSManaged var family: String?
@NSManaged var gained: NSNumber?
@NSManaged var hatchEXP: NSNumber?
@NSManaged var imageName: String?
@NSManaged var imageNameEgg: String?
@NSManaged var imageNamef: String?
@NSManaged var name: String?
@NSManaged var rarity: String?
@NSManaged var stage: NSNumber?
@NSManaged var adopt: NSSet?
@NSManaged var evolveTo: NSSet?
@NSManaged var userPets: NSSet?
@NSManaged var basePet: Pet?
}
Pet
import Foundation
import CoreData
class Pet: NSManagedObject {
func addEvolveToObject(value:Evolution) {
let items = mutableSetValueForKey("evolveTo") as NSMutableSet;
items.addObject(value)
}
}
et les données de base de l'évolution classe
import Foundation
import CoreData
extension Evolution {
@NSManaged var evolveValue: String?
@NSManaged var howEvolve: String?
@NSManaged var evolveTo: Pet?
}
La classe animal peut prendre plusieurs objets d'évolution, chaque objet d'évolution est pour un animal de compagnie
Non, j'essaie de comprendre pourquoi l'objet change quand je ne l'ai pas dit à –
ajouté des codes de classe –
J'ai aussi essayé l'évolution d'ajouter en utilisant @NSManaged func mais obtenir le même résultat. Une fois l'objet ajouté au nsset, evolveto est défini sur l'animal de compagnie auquel il est ajouté. Les autres champs conservent les bonnes données –