MR_contextForCurrentThread is deprecated

LeChatNoirLeChatNoir Membre, Modérateur

Salut,


 


J'ai ce warning qui concerne Magical Record et j'ai décidé de m'y attaqué.


 


Sur SO, je trouve une réponse à  ma question "on remplace par quoi ?" :



http://stackoverflow.com/questions/20535419/what-is-the-replacement-method-for-this-magicalrecord-deprecated-call

Du coup, je remplace mes :

[[NSManagedObjectContext MR_contextForCurrentThread] MR_save*]


 


par


 


 


[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { /


/make your changes in the localContext


[localContext save*];


}];



Et guess what ? Ca ne sauvegarde plus !

Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur

    Bon, je faisais 



    [localContext MR_saveToPersistentStoreWithCompletion:nil];


    Et ça marche pas.


    Mais en faisant 



    [localContext MR_saveToPersistentStoreAndWait];


    Ca fonctionne...


  • LeChatNoirLeChatNoir Membre, Modérateur

    hmmmm...En fait non, ça ne fonctionne pas non plus.


     


    L'une des opérations se fait dans une thread à  part mais les autres se font dans la main thread. Aucune des 2 ne fonctionnent avec cette nouvelle méthode préconisée.

  • LeChatNoirLeChatNoir Membre, Modérateur
    mai 2016 modifié #4

     Bon, je ne m'en sors pas de ce truc. C'est rageant.


     


    Voilà  où j'en suis. Je requête un web service qui me renvoie un JSON. 


    Je boucle sur chaque élément et je créer une occurence de l'entité Topo.


     


    Tout ça doit être sauvegardé de manière permanente.


     


    Avant, je faisais ça et ça fonctionnait :


     


    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    BOOL atLeastOne=NO;
    for (NSDictionary * tmp in JSON) {
    // NSLog(@Topo maj %@",tmp);
    atLeastOne=YES;
    [Topo upsertTopo:tmp];
    }
    [[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil];

    // everyting is ok.
    if (atLeastOne) {
    [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:kLastUpdateDateDigitalTopos];
    [[NSUserDefaults standardUserDefaults] synchronize];
    }

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
    {
    NSLog(@Refresh topo num ko mais on laisse en l'état... %@ - %@ - %@",error, response, JSON);
    }];
    [operation start]; 

    MR_contextForCurrentThread étant deprecated, je tente de le remplacer par les méthodes préconisées.


    J'ai essayé ça mais ca sauvegarde absolument pas...



    AFJSONRequestOperation *operationTopos = [AFJSONRequestOperation JSONRequestOperationWithRequest:requestTopos success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    BOOL atLeastOne=NO;
    for (NSDictionary * tmp in JSON) {
    atLeastOne=YES;
    [Topo upsertTopo:tmp];
    }
    // everyting is ok.
    if (atLeastOne) {
    [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:kLastUpdateDateDigitalTopos];
    [[NSUserDefaults standardUserDefaults] synchronize];
    }
    }];
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
    {
    NSLog(@Refresh topo num ko mais on laisse en l'état... %@ - %@ - %@",error, response, JSON);
    }];
    [operationTopos start];


    Je ne sais plus trop quoi faire...


  • LeChatNoirLeChatNoir Membre, Modérateur

    Des fois, d'expliquer un truc ici, ça aide à  comprendre son propre problème  ::)


     


    Le problème se situe dans ma méthode upsertTopo. C'est dans cette méthode que je créer les entités et je les créais avec la méthode MR_createEntity.


     


    Or avec la nouvelle méthode qui utilise les blocks, il faut bien reprendre le contexte et utiliser :


    MR_createEntityInContext:monContexte.


     


    Et ça fonctionne tout de suite mieux :)

  • LeChatNoirLeChatNoir Membre, Modérateur

    Bon, et pour les mises à  jours, attention également aux méthodes de sélection.


     


    MR_findFirstByAttribute:withValue


     


    Doit être remplacée par 


     


    MR_findFirstByAttribute:withValue:InContext


     

    Quand on est dans un block de saveWithBlock par exemple.


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