Nouveauté des données de base et j'ai deux problèmes: Initialiser un NSManagedObject
correctement et en conservant ses valeurs entre commodité et initialiseurs désignés.Initialisation de l'objet géré Données de base
Mon code dans mon AnalyticsEvent NSManagedObject
sous-classe:
@NSManaged public var eventName: String?
@NSManaged public var type: String?
@NSManaged public var reference: String?
@NSManaged public var timestamp: Double
public required init() {
// Initialize CoreData stack...
let manager = CoreDataManager(modelName: "Analytics", storeName: "Analytics")
// I'm not sure what I should be using to instantiate a new entity here...
// I believe the entity(forEntityName:in:) class method should return an existing value stored in managedObjectContext...
let event = NSEntityDescription.entity(forEntityName: "Event", in: manager.managedObjectContext!)
// ... and insertNewObject(forEntityName:into:) to create a placeholder
// for my new object until I issue saveContext() on managedObjectContext.
// This isn't working right now, so comment out following line
//let event = NSEntityDescription.insertNewObject(forEntityName: "Event", into: database.managedObjectContext!) as! AnalyticsEvent
super.init(entity: event!, insertInto: database.managedObjectContext)
let customProperties = CustomProperties()
self.customPropertiesData = NSKeyedArchiver.archivedData(withRootObject: properties) as Data
self.timestamp = Date().timeIntervalSince1970
}
public convenience init(eventName: String) {
self.init()
// At this point the data set in my designated initializer (above),
// the values have been lost. For example, timestamp == 0
self.eventName = eventName
self.type = EventType.discreteEvent
}
Merci!
EDIT:
Une enquête plus approfondie peut révéler que peut-être est invoqué mon initialiseur de commodité par l'appel super.init(entity:insertInto:)
et si elle est, je ne sais pas comment il trouve le sélecteur de la commodité initialiseur ... mais expliquerait pourquoi sa valeur (telle que l'horodatage) n'est pas retenue - parce que c'est une nouvelle instance de l'objet ?! Hmm ...
EDIT 2:
j'ai oublié de mentionner que je reçois cette erreur d'exécution lors de l'exécution frappe la ligne:
self.eventName = eventName
CoreData: Erreur: un objet géré Mutating 0x7fa2da54da90 (0x7fa2da54da40) après avoir été retiré de son contexte.
Merci, mais j'ai aussi essayé. Pas de chance! Il fournit également des erreurs d'exécution identiques. –
@AlexSmith Je creuse dans les initialiseurs et ce que '@ NSManaged' signifie réellement maintenant ... Avez-vous vu cette réponse: http://stackoverflow.com/a/39239651/1060154 Je ne peux pas se porter garant pour cela, mais serait rapide à essayer! – MathewS
Merci encore, mais malheureusement pas ce dont j'ai besoin. Comme avant ... –