2017-04-10 1 views
0

So habe ich einige Methoden, um meine Einstellungen in CoreData mit MagicalRecord zu speichern. Aber dann, dies zu tun Ich versuche, ich diesen Fehler: Illegal attempt to establish a relationship 'settings' between objects in different contextsMagicalRecord und CoreData speichern in verschiedenen Kontextfehler

So, hier ist mein Code: Diese Methode Daten von bestimmten Benutzern ist das Speichern, die unter Verwendung von Programm jetzt

-(void)saveSettingsFirst:(BOOL)first{ 
    [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext){ 
     SettingsData *newData = [self settingsDataForCurrentUserInContext:localContext]; 

     //SettingsData *newData = [SettingsData MR_createEntityInContext:localContext]; 
     newData.firstValue = @(first); 
     NSLog(first ? @"saveSettings FIRST 0" : @"saveSettings FIRST 1"); 
     newData.settings = [[CacheManager shared] currentUserWithContext:localContext]; 

     NSLog(@"Settings one is saved"); 
    }]; 
} 

Diese Methode ist Einnahme von Coredata für current Einstellung:

-(SettingsData*)settingsDataForCurrentUserInContext:(NSManagedObjectContext*)context{ 
    NSLog(@"In settingsDataForCurrentUserInContext"); 
    SettingsData *settings = [SettingsData MR_findFirstByAttribute:@"settings" withValue:[[CacheManager shared] currentUserWithContext:context]]; 
    return settings; 
} 

Und schließlich Methode, die Userdata für den aktuellen Benutzer von Coredata holen:

-(UserData*)currentUserWithContext:(NSManagedObjectContext*)context{ 
    UserData *persons = [UserData MR_findFirstInContext:context]; 
    if (persons!=nil) { 
     NSLog(@"Current user with context not nil value"); 
    } 
    return persons; 
} 

Ich brauche Hilfe zu erkennen, ist mein Fehler, denn für mich scheint alles Logik.

Antwort

0

Sie verwenden den Standardkontext beim Abrufen Ihrer SettingsData. So ändern:

SettingsData *settings = [SettingsData MR_findFirstByAttribute:@"settings" withValue:[[CacheManager shared] currentUserWithContext:context]];

zu:

SettingsData *settings = [SettingsData MR_findFirstByAttribute:@"settings" withValue:[[CacheManager shared] currentUserWithContext:context] inContext: context];

(Haftungsausschluss: in Browser eingegeben haben, nicht für Tippfehler geprüft)

+0

Okey, es funktioniert! Vielen Dank! Kannst du erklären oder Link zu lesen, warum dies funktioniert hat. Weil ich den Benutzer bereits mit Kontext geladen habe und es erfolgreich geladen wurde. Aber wie ich sehen kann, müssen wir in demselben Kontext suchen, oder? –

+0

Ja, benutze immer denselben Kontext. Wenn Sie den MR-Code überprüfen, sehen Sie, dass unsere ursprüngliche Zeile den Standardkontext verwendet. Aber du passierst einen lokalen Kontext, also solltest du dich darauf einstellen. – Koen

+0

Siehe auch hier: https://github.com/magicalpanda/MagicalRecord/wiki/Fetching-Entities#finding-entities-in-a-specific-context – Koen