HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了核心数据iOS 8今日小工具问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个DataManager类,它返回一个共享实例:

+ (DataManager *)sharedInstance;
{
    static DataManager *sharedInstance = nil;
    static dispatch_once_t pred;

    dispatch_once(&pred,^{
        sharedInstance = [[DataManager alloc] init];
    });

    return sharedInstance;
}

在这里,我跟踪我的managedObjectContext,managedObjectModel,persistentStoreCoordinator.

还有一方法可以拉出用于显示的项目:

- (NSArray *)getItems
{
    NSFetchrequest *fetchrequest = [[NSFetchrequest alloc] initWithEntityName:@"Item"];
    return [[self managedObjectContext] executeFetchrequest:fetchrequest error:nil];
}

现在在我的主应用程序中,当我调用此getItems然后单独修改项目时,我有一个视图控制器.例如,set item.itemname = @“testName”;然后调用我的save方法.

我也有一个iOS 8,在我的TodayViewController中我也调用了getItems方法.我有一个Nsnotification,它检测managedObjectContext保存.

[[NsnotificationCenter defaultCenter] addObserver:self SELEctor:@SELEctor(refetchItems) name:NsmanagedObjectContextDidSaveNotification object:[[DataManager sharedInstance] managedObjectContext]];

这些重新获取的项目会被调用,但会返回过时的NsmanagedObjects.例如,itemname没有更改为@“testName”.

我哪里错了?如果您需要查看任何其他代码,请告诉我们.

谢谢!

解决方法

您可以尝试以下方法来刷新特定的ManagedObject.如果要刷新ManagedObject列表,则循环每个对象并执行命令.

[_managedObjectContext refreshObject:act mergeChanges:YES];

或者对于iOS版本8.3及更高版本,您可以使用以下方法一次更新上下文中的所有ManagedObject,如下所示.

[_managedObjectContext refreshAllObjects];

它有点工作,但仅适用于数据updatE,而不适用于添加删除数据.

如果它不起作用,您也可以添加

[_managedObjectContext reset];

之后,您必须阅读“重新分配”您从核心数据存储中加载的所有变量.

一个解决方案(更慢,更难看)

如果上述方法无效,则另一种解决方案是删除当前上下文并再次创建.

我刚刚开始

_persistentStoreCoordinator = nil;
_managedObjectModel = nil;
_managedObjectContext = nil;

我有这个属性的CoreDataManager类

@property (nonatomic,retain,readonly) NsmanagedObjectModel *managedObjectModel;
@property (nonatomic,readonly) NsmanagedObjectContext *managedObjectContext;
@property (nonatomic,readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

在课堂上我手动创建了setter.如果我因为Setter而没有所有变量,那么一旦我在核心数据管理器类之外读取它们,它们就会再次出现.

您可以使用NSUserDefault商店来改善这一点.它正在正确更新.在主应用程序中,如果更改了smething,请在NSUserDefault中设置标志.在扩展中,读取此标志并标记标志,重置核心数据.这样,您将节省一些刻度并使事情变得更快.

对于NSUserDefault的分配(在两个应用程序中 – 扩展和主要)使用此 – 之后,您可以通过它来读取数据并且它们应该同步

NSUserDefaults *prefs = [[NSUserDefaults alloc] initWithSuitename:GROUP_NAME]; //share with extension

大佬总结

以上是大佬教程为你收集整理的核心数据iOS 8今日小工具问题全部内容,希望文章能够帮你解决核心数据iOS 8今日小工具问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。