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 :)


 


I'm trying to use AlamofireCoreData Pod but got an issue. Every value are nil; (see console log message below)

 

Ma Class News : 

 

   


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?
    
    }

 

 

Dans mon fichier swift qui gère l'API (extrait)

 

    


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")
                }
            }
        }

 

 

Quand je fais un call de ma fonction, j'ai ça dans la console ...

 

 


  [<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;
    })]



 

L'API elle me renvoie ça :

 

 


  [
        {
            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

  • CéroceCéroce Membre, Modérateur

    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 ...


Connectez-vous ou Inscrivez-vous pour répondre.