J'ai plusieurs postes de travail dans l'entité de données principale dont le jobId est -1. J'ai besoin d'extraire tous ces éléments et de mettre à jour le jobId en utilisant les identifiants appropriés figurant dans mon objet et passés dans la méthode updateMyJobs. Je n'ai pas extrait la classe NSManagedObject pour travailler sur des données de base (c'est-à-dire que j'ai vérifié l'entité en tant que définition de classe)
Voici mon code:
func updateMyJobs(jobId: Int){
managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "DBJobsNearBy")
fetchRequest.predicate = NSPredicate(format: "jobId = '-1'")
let result = try? managedObjectContext.fetch(fetchRequest)
let resultData = result as! [DBJobsNearBy]
for object in resultData {
print(object.jobId)
if object.jobId == -1 {
object.setValue("\(jobId)", forKey: "jobId")
}
}
do {
try managedObjectContext.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
J'ai passé une valeur entière et appeler la méthode ci-dessus pour mettre à jour l'élément comme ceci.
DatabaseHandler.shared.updateMyJobs(jobId: 222)
Erreur: application en raison de l'exception non interceptée 'NSInvalidArgumentException', raison: 'Type de valeur inacceptable pour attribut: property = "jobId"; type souhaité = NSNumber; type donné = Swift._NSContiguousString; valeur = 222. '
J'essaye de définir le nouveau jobId sur l'objet associé dans l'entité de données principale. Est-il nécessaire d'extraire NSManagedObject Class ou non? S'il vous plaît, aidez-moi à le faire. Je vous remercie.
Veuillez lire le message d'erreur. C'est très clair. Dans setValue
, vous passez une String
(via une interpolation de chaîne) plutôt que prévu Int
ou NSNumber
object.setValue(jobId, forKey: "jobId")
ou
object.setValue(NSNumber(value: jobId), forKey: "jobId")
Mais la meilleure façon recommandée est la notation par points
object.jobId = jobId
Vous devez définir NSNumber
au lieu de String
. Remplacez cette ligne:
object.setValue("\(jobId)", forKey: "jobId")
avec:
object.jobId = jobId