gpt4 book ai didi

ios - 如何从 NSPersistentStoreDidImportUbiquitousChangesNotification 获取插入和更新的对象?

转载 作者:行者123 更新时间:2023-11-28 19:06:20 25 4
gpt4 key购买 nike

我想从 NSPersistentStoreDidImportUbiquitousChangesNotification 获取插入和更新对象,以对它们进行一些检查。

对象可以分为两类:“Alpha”和“Beta”。两个类都有

property (nonatomic, retain) NSString* name

我应该检查哪一个。

如何获取?

下面的代码不起作用,因为它说“name”是一个未知的选择器:

-(void) checkObjects
{
NSDictionary *insertedObjects = [[note userInfo] objectForKey: @"inserted"];
NSDictionary *updatedObjects = [[note userInfo] objectForKey: @"updated"];

for(NSManagedObject *obj in insertedObjects){
if([obj.entity.managedObjectClassName isEqualToString:@"Alpha"]){

Alpha *alpha = (Alpha*) obj;

if (alpha.name isEqualToString:@"xyz"){
//Do some check
}

}else if([obj.entity.managedObjectClassName isEqualToString:@"Beta"]){

Beta *beta = (Beta*) obj;

if (beta.name isEqualToString:@"xyz"){
//Do some check
}
}
}

}

如果我改变:

Alpha *alpha = (Alpha*) obj;

Beta *beta = (Beta*) obj;

收件人:

Alpha *alpha = (Alpha*) obj.entity;

Beta *beta = (Beta*) obj.entity;

alpha = Alpha <-- 这是类的名称,而不是我想要的对象的名称!

beta = Beta <--- 这是类的名称,而不是我想要的对象的名称!

最佳答案

当您获得 NSPersistentStoreDidImportUbiquitousContentChangesNotification 时,userInfo 中的对象不是托管对象,它们是托管对象 ID。即 NSManagedObjectID 的实例。如果要在托管对象上查找属性,需要获取ID对应的对象。有点像

NSDictionary *insertedObjectIDs = [[note userInfo] objectForKey:NSInsertedObjectsKey];
for(NSManagedObjectID *objID in insertedObjects) {
NSError *error = nil;
NSManagedObject *obj = [self.managedObjectContext existingObjectWithID:objID error:&error];
....continue...
}

如果 self 没有托管对象上下文,您可能需要更改它。

此外,稍微有点偏题——通常最好使用 NSInsertedObjectsKey 而不是 @"inserted"NSUpdatedObjectsKey 而不是 @“更新”。 Apple 可能不会更改键名,但他们可以,因此使用键名而不是字符串文字是更好的选择。

关于ios - 如何从 NSPersistentStoreDidImportUbiquitousChangesNotification 获取插入和更新的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20123868/

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