2017-04-10 55 views
0

所以我有一些方法可以使用MagicalRecord将我的设置保存在CoreData中。但后来我试图做到这一点,我得到这个错误:Illegal attempt to establish a relationship 'settings' between objects in different contextsMagicalRecord和CoreData在不同的上下文中保存错误

因此,这里是我的代码: 此方法由特定的用户保存数据,谁在使用PROGRAMM现在

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

这种方法采取从CoreData的currentUser设置:

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

最后的方法,谁从CoreData获取用户数据为当前用户:

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

我需要帮助来认识是我的错误,因为对我来说这似乎是逻辑。

回答

0

您在使用SettingsData时正在使用默认上下文。因此,更改:

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

到:

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

(免责声明:在浏览器中输入的,而不是错字的测试)

+0

欧凯,它的作品!谢谢! 你可以解释或给出链接阅读为什么这个工程。因为我已经使用上下文加载用户并成功加载。但正如我所看到的,我们需要在相同的环境下进行搜索,对吧? –

+0

是的,总是使用相同的上下文。如果您检查MR码,您会看到我们的原始线路使用默认上下文。但是你传递了一个本地上下文,所以你应该调整。 – Koen

+0

另请参阅此处:https://github.com/magicalpanda/MagicalRecord/wiki/Fetching-Entities#finding-entities-in-a-specific-context – Koen

相关问题