gpt4 book ai didi

core-data - 核心数据 : change objects in NSManagedObjectContextObjectsDidChangeNotification

转载 作者:行者123 更新时间:2023-12-04 02:43:37 25 4
gpt4 key购买 nike

是否可以在不再次触发处理程序的情况下更改 NSManagedObjectContextObjectsDidChangeNotification 处理程序中托管对象的属性?我从我们的服务器获取数据,RestKit 将数据映射到 Core Data。数据到达我的数据库后,我必须更改一些属性。感谢您的帮助。

编辑:这是我的代码。 handleDidChangeNotification方法循环调用:

- (void)addMyObserver
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleDidChangeNotification:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:self.objectManager.managedObjectStore.mainQueueManagedObjectContext];
}

- (void)handleDidChangeNotification:(NSNotification *)notification
{
NSSet *updatedObjects = [[notification userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[notification userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *insertedObjects = [[notification userInfo] objectForKey:NSInsertedObjectsKey];

// modifiedObjects with store entity:
NSSet *modifiedObjects = [updatedObjects setByAddingObjectsFromSet:insertedObjects];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF isKindOfClass: %@", [MyStore class]];
NSSet *modifiedStoreObjects = [modifiedObjects filteredSetUsingPredicate:predicate];

if (modifiedStoreObjects.count > 0)
{
[modifiedStoreObjects enumerateObjectsUsingBlock:^(MyStore *store, BOOL *stop)
{
store.distanceValue = 1000;
}];
}
}

最佳答案

要在不触发更改通知的情况下修改 Core Data 对象,您可以使用原始访问器方法,例如

[store setPrimitiveValue:@1000 forKey:@"distanceValue"];

(注意这里需要对象值,标量值不行。)

但如果没有任何不良副作用,您应该仔细考虑,因为其他听众也将不会收到有关更改值的通知。

另一种可能的解决方案可能是检查是否必须更改属性,并仅在必要时进行修改。

关于core-data - 核心数据 : change objects in NSManagedObjectContextObjectsDidChangeNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com