【问题标题】:Magical Record appears to save, but changes are lost if app is terminatedMagical Record 似乎可以保存,但如果应用程序终止,更改会丢失
【发布时间】: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,这就是我没有升级到最新版本的原因。

谢谢!

【问题讨论】:

    标签: ios core-data magicalrecord magicalrecord-2.1


    【解决方案1】:

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

    [context save:nil];
    

    【讨论】:

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

    破解了!!

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多