Objective c OSX中的ObjCMongoDB框架和SyncServices
我正在寻找一些关于如何保持CoreData模型与MongoDB同步的指针。我正在利用ObjCMongoDB框架,我可以在核心数据中创建如下对象:Objective c OSX中的ObjCMongoDB框架和SyncServices,objective-c,mongodb,core-data,objcmongodb,Objective C,Mongodb,Core Data,Objcmongodb,我正在寻找一些关于如何保持CoreData模型与MongoDB同步的指针。我正在利用ObjCMongoDB框架,我可以在核心数据中创建如下对象: coreDataObj = [BSONDecoder decodeManagedObjectWithClass:[Hostname class] context:[self managedObjectContext]
coreDataObj = [BSONDecoder decodeManagedObjectWithClass:[Hostname class]
context:[self managedObjectContext]
data:[bson_host dataValue]];
不幸的是,当您重新导入MongoDB时,会生成并存储相同对象的副本
我不确定我是否错误地使用了ObjCMongoDB框架,或者我是否需要使用SyncServices将数据导入coredata模型
有人能给我指导或提供一个例子吗?ObjCMongoDB(我是其作者)对核心数据执行反序列化,但目前不执行重复数据消除或同步。它将BSON文档视为简单的有序字典,没有标识属性的意义。特别是,它将\u id
视为任何其他键
你可以得到你想要的行为,但你需要自己实现它
最简单的方法是在NSManagedObject子类中实现-awakAfterUsingCoder:
或-awakAfterUsingBSondeCoder:
——不管是哪一个。解码器将自动调用这些
self
将是新的反序列化对象。运行获取请求以查找重复的现有条目。如果找到新对象,请将属性应用于现有对象,从上下文中删除新对象,然后返回现有条目。如果找不到,只需返回self
您可以使用-dictionaryWithValuesForKeys:
和-setValuesForKeysWithDictionary:
来完成此操作,我通常使用以下方法获得键列表:
+ (NSArray *) persistentKeysForEntity:(NSEntityDescription *) entity {
NSMutableArray *result = [NSMutableArray array];
for (NSPropertyDescription *pdesc in [entity properties]) {
if ([pdesc isTransient]) continue;
[result addObject:pdesc.name];
}
return [result copy];
}
添加:如果不需要排除瞬态属性,可以使用一行应用值:
[target setValuesForKeysWithDictionary:[self dictionaryWithValuesForKeys:self.entity.attributesByName.allKeys]];