Valeurs à nil dans mon entité Core Data
Hello les amis,
4 ans presque sans posts, je reviens à mes vrais amour et reprends le dev iOS (autant vous dire que la remise à niveau est violente lol).
J'ai un petit souci que j'aimerai vous soumettre.
En gros j'ai fais une API Rest (JSON) en Rails qui me renvoie un tableau avec des News.
Je veux dans mon app, faire un call à l'API via Alamofire et enregistrer le tout dans une entité CoreData. Là je tombe sur ce pod -> https://github.com/ManueGE/AlamofireCoreDataJe me dis, bingo, ça va me simplifier la vie, mais voilà , ça marche pas LOL
Je vous mets mon code et le retour console après le call, si vous avec des pistes, ça serait gentil
extension News {
@nonobjc public class func fetchRequest() -> NSFetchRequest<News> {
return NSFetchRequest<News>(entityName: "News")
}
@NSManaged public var content: String?
@NSManaged public var created_at: NSDate?
@NSManaged public var date_pub_beg: NSDate?
@NSManaged public var date_pub_end: NSDate?
@NSManaged public var id: Int16
@NSManaged public var results: Bool
@NSManaged public var rotation: Bool
@NSManaged public var summary: String?
@NSManaged public var title: String?
@NSManaged public var updated_at: NSDate?
}
private var appDelegate = UIApplication.shared.delegate as! AppDelegate
private let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
func getNews(url: String, completion: @escaping (Bool) -> Void) {
Alamofire.request(url).responseInsert(context: context, type: Many<News>.self) { response in
switch response.result {
case let .success(news):
print (news)
completion(true)
case .failure:
// handle error
completion(false)
print("Erreur")
}
}
}
[<News: 0x60800009fef0> (entity: News; id: 0x60800003c880 <x-coredata:///News/tBB28D896-033A-4084-807A-6A31993B8F2F2> ; data: {
content = nil;
"created_at" = nil;
"date_pub_beg" = nil;
"date_pub_end" = nil;
id = 0;
results = nil;
rotation = nil;
summary = nil;
title = nil;
"updated_at" = nil;
}), <News: 0x608000282170> (entity: News; id: 0x60800003ba00 <x-coredata:///News/tBB28D896-033A-4084-807A-6A31993B8F2F3> ; data: {
content = nil;
"created_at" = nil;
"date_pub_beg" = nil;
"date_pub_end" = nil;
id = 0;
results = nil;
rotation = nil;
summary = nil;
title = nil;
"updated_at" = nil;
})]
[
{
id: 2,
title: "Victoire de la France",
date_pub_beg: "2017-11-27",
date_pub_end: "2017-12-31",
summary: "La France remporte la Coupe Davis.",
content: "<div>Au terme du dernier match, la France remporte la <strong>Coupe Davis.</strong></div>",
created_at: "2017-11-27T14:18:07.527Z",
updated_at: "2017-11-27T14:18:07.527Z",
results: false,
rotation: false
},
{
id: 1,
title: "Test d'article",
date_pub_beg: "2017-09-05",
date_pub_end: "2017-09-06",
summary: "Ceci est un test, AH BON ?",
content: "<div><strong>Petit test pour voir !</strong></div><ul><li>test 1</li><li>test 2</li><li>test 3</li></ul><div><br></div>",
created_at: "2017-09-05T07:43:18.011Z",
updated_at: "2017-11-27T14:42:18.907Z",
results: false,
rotation: false
}
]
Donc, la call semble fonctionner, ça détecte bien les deux éléments qu'envoie l'API mais après il y a un truc pas clair.
Du coup je ne vois même pas trop comment débugguer donc votre aide sera précieuse
Merci
Steph
Réponses
Bon retour parmi nous!
Si d'un côté, l'API renvoie un JSON valide, et que de l'autre, tu as des NSManagedObjects qui ont bien été instanciés, mais dont les propriétés ne sont pas fixées, alors tu as un problème de mapping entre le JSON et les objets.
Que dire, sinon que c'est toi qui va devoir aller fouiller au débogueur.
C'est l'impression que j'ai oui, merci Céroce, les pods c'est bien mais parfois ça obscurci un peu trop les choses. J'ai ouvert une issue sur le git du gars au cas où, je regarde du côté d'un custom wrapper parce que si j'ajoute des pièces jointes à mes news je serais dans ce cas, mais je vais aussi regarder une autre solution où je pourrais maà®triser un peu plus le code aussi ...