Magical Record 似乎可以保存,但如果应用程序终止,更改会丢失

Posted

技术标签:

【中文标题】Magical Record 似乎可以保存,但如果应用程序终止,更改会丢失【英文标题】:Magical Record appears to save, but changes are lost if app is terminated 【发布时间】:2013-11-02 21:38:20 【问题描述】:

我正在使用 Magical Record 2.1 来处理我的应用程序中的数据持久性。如果我创建一个新实体,设置一些它的属性并保存,它工作正常。但是,稍后,如果我获取该实体,更新它的属性并保存,后续获取将拥有新数据,直到我终止应用程序并重新启动。在新应用会话期间,旧数据会重新出现。

这就是我创建新实体的方式:

self.localContext = [NSManagedObjectContext MR_defaultContext];
self.theNewListing = [Listing MR_createInContext:self.localContext];

我正在使用 MRDefaultContext 阅读了这篇博文:http://saulmora.com/2013/09/15/why-contextforcurrentthread-doesn-t-work-in-magicalrecord/

在这种情况下,我的主要属性是一个字典,我这样设置它:

NSMutableDictionary *tempDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"A description", @"slFieldDescription", etc, etc, nil];
self.theNewListing.dataDictionary = tempDictionary;

我是这样保存的:

[self.presentingViewController dismissViewControllerAnimated:YES completion:^(void) 

    [self.localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error)
        if(!success) 
            NSLog(@"%@", error);
        
        else 
            [self.thePresentingVC refreshCollectionViews:nil];
        
    ];
];

我在集合视图中显示我的数据,此时一切看起来都很好。如果我终止并重新启动,数据仍然存在。

如果我再次获取实体并像这样更新属性:

NSMutableDictionary *newTempDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"A new description", @"slFieldDescription", etc, etc, nil];
self.theNewListing.dataDictionary = newTempDictionary;

然后使用与上面相同的保存代码进行保存,然后使用下面的代码更新我的收藏视图,一切看起来都不错。

self.listingsArray = [[NSMutableArray alloc] initWithArray:[Listing MR_findAllSortedBy:@"dateListed" ascending:NO]];
[self.mainCollectionView reloadData];

也就是说,直到我退出应用并重新启动。

如果你想知道,我正在使用 FTASync,它只支持 MR 2.1,这就是我没有升级到最新版本的原因。

谢谢!

【问题讨论】:

【参考方案1】:

不确定 MR,也不确定为什么需要它。如果该框架可以为您提供主要上下文,只需调用本机核心数据保存。

[context save:nil];

【讨论】:

MR 在工作时很棒!它节省了很多时间。另外,我也在使用需要 MR 的 FTASync。我尝试在MR保存后添加核心数据保存作为测试,但仍然没有运气。【参考方案2】:

破解了!!

我注意到我的其他属性正在保存,但不是这个(这个包含 UI 中显示的所有数据),这导致我进行了另一条调查。

因此,我似乎需要使用不可变字典来存储这些数据,如下所述:

Core Data saving problem: can't update transformable attribute (NSArray)

【讨论】:

以上是关于Magical Record 似乎可以保存,但如果应用程序终止,更改会丢失的主要内容,如果未能解决你的问题,请参考以下文章

Plain Core Data vs Core Data + Magical Record

ios Magical Record保存在UIApplicationWillTerminateNotification上

Magical Record 不会保存到 SQLite 文件

AFNetwork、Magical Record和块内保存

ios Magical Record 保存在 UIApplicationWillTerminateNotification

更改的属性未与 Magical Record 一起保存