MagicalRecord 不保存对多关系实体

Posted

技术标签:

【中文标题】MagicalRecord 不保存对多关系实体【英文标题】:MagicalRecord Not saving to-many relationship entity 【发布时间】:2015-04-03 09:36:59 【问题描述】:

当我第一次启动我的应用程序时,我创建了 Show 对象,其中包含与 Feature 实体的多对多关系。仅在第一次启动我的应用程序后,它正确地存储了我的显示对象及其正确的功能。问题是,当我第二次启动我的应用程序时,它会从我的数据库中删除所有功能,尽管没有第二次访问数据库(我们每 5 天更新一次)。

这里是我用来存储的代码:

-(void)insertOrUpdateShow:(Show_fr*)show withObjects:(NSDictionary*)item forMoc:(NSManagedObjectContext*)context

    if (!show)
    
        show = [Show_fr MR_createInContext:context];
    
    show.title                  = [item objectForKey:@"title"] ;
    show.latitude               = [item objectForKey:@"latitude"] ;
    show.longitude              = [item objectForKey:@"longitude"] ;
    NSArray * features          = [item objectForKey:@"feature"] ;
    for (NSDictionary * featureDict in features) 
        [show addFeaturesObject:[self createFeatureFromDictionnary:featureDict forMoc:context]];
    
    [context MR_saveToPersistentStoreAndWait];


-(Feature_fr*)createFeatureFromDictionnary:(NSDictionary*)featureDictionary forMoc:(NSManagedObjectContext*)context

    Feature_fr * feature = [Feature_fr MR_createInContext:context];
    feature.icon    = [featureDictionary objectForKey:@"icon"] ;
    feature.label   = [featureDictionary objectForKey:@"label"] ;
    feature.value   = [featureDictionary objectForKey:@"value"] ;
    return feature;

确切地说,在第一次启动时,我的数据库中有 6 个节目和 127 个功能对象,而从第二次开始,我有 6 个节目,但有 0 个功能。

请问您知道如何解决这个问题吗?

问候

【问题讨论】:

【参考方案1】:

您可以使用 Magical Record Save Block 来知道您的数据已成功保存在两个表中

[[yourObject managedObjectContext] MR_saveToPersistentStoreWithCompletion:^(BOOL contextDidSave, NSError *error) 

        if (!error) 
    NSLog(@"Object %@",object);
        
 ];

在此代码中,“yourobject”是您要保存的对象

【讨论】:

感谢 Muhammad 的回答,我的对象已保存,我无法使用 SQlite 浏览器看到它,问题在于,如果我重新启动应用程序,我的对象(功能)将从数据库中删除. 我的建议是安装一个 sqlite 客户端,然后检查功能是否正在插入到持久存储中【参考方案2】:

就我而言,我忘了设置模型。

MagicalRecord.setDefaultModelFrom(Model.self)

【讨论】:

以上是关于MagicalRecord 不保存对多关系实体的主要内容,如果未能解决你的问题,请参考以下文章

多态关系的 MagicalRecord 导入

Swift核心数据多对多关系不保存实体

神奇的记录1对多的关系目标c

如何获取没有多对多关系的实体

保存循环删除多对多CoreData关系的一端

实体框架使用 Codefirst、通用存储库、工作单元模式保存多对多关系