gpt4 book ai didi

ios - 如何从 CloudKit CKRecord 获取 CoreData NSManagedObject?

转载 作者:行者123 更新时间:2023-11-29 05:20:58 35 4
gpt4 key购买 nike

我使用 CoreData 进行本地存储,使用 CloudKit 处理云同步。我已经设置了 CloudKit 订阅来检测远程更改。这些通知提供了表示添加的数据的CKRecord。记录会自动与 CoreData 存储同步。如何将 CKRecordNSManagedObject 协调一致?我需要能够以与直接从 CoreData 获取实体相同的方式与其进行交互。

这是我一直在代码方面所做的工作。问题是 CoreData 存储中不存在标识 CloudKit 中记录的 recordName 字段,因此我收到未处理的异常。但我不知道哪个字段(如果有)将与 CloudKit 记录的名称字段匹配。

//CKRecord+NSManagedObject

- (NSManagedObject*)managedObject {
NSPersistentCloudKitContainer *container = [CoreDataFunctions persistentContainer];
NSManagedObjectModel *managedObjectModel = container.managedObjectModel;
NSDictionary *entitiesByName = managedObjectModel.entitiesByName;
NSString *recordType = [self.recordType stringByReplacingOccurrencesOfString:@"CD_" withString:@""];

NSEntityDescription *entityDescription = [entitiesByName valueForKey:recordType];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:entityDescription.name];
fetchRequest.fetchLimit = 1;
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"recordName == %@", self.recordID.recordName];
NSError *error = nil;
NSArray *results = [[CoreDataFunctions managedObjectContext] executeFetchRequest:fetchRequest error:&error];
NSManagedObject *managedObject;
if (error) {
NSLog(@"Error %@", error);
}
else {
if (results.count == 0) {
NSLog(@"No result");
}
else {
managedObject = results.firstObject;
NSLog(@"%@", managedObject.entity.propertiesByName);
}
}

return managedObject;
}

最佳答案

我不知道是否有更好的方法,但我最终在我的 CoreData 数据库中添加了一个名为 cloudID 的字段。每次创建 NSManagedObject 实例并将其插入数据库时​​,其 cloudID 都会设置为 [NSUUID UUID]。它被推送到 CloudKit 中的同一字段,因此我可以使用它来将 CloudKit CKRecord 与 CoreData NSManagedObject 进行匹配。

关于ios - 如何从 CloudKit CKRecord 获取 CoreData NSManagedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58684914/

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