首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OSX中的ObjCMongoDB框架和SyncServices

OSX中的ObjCMongoDB框架和SyncServices
EN

Stack Overflow用户
提问于 2013-07-17 21:05:08
回答 1查看 201关注 0票数 1

我正在寻找一些关于如何使CoreData模型与MongoDB保持同步的提示。我正在利用ObjCMongoDB框架,我可以在核心数据中创建对象,如下所示:

代码语言:javascript
复制
coreDataObj = [BSONDecoder decodeManagedObjectWithClass:[Hostname class]
                                                context:[self managedObjectContext]
                                                   data:[bson_host dataValue]];

不幸的是,当您重新导入MongoDB时,会创建并存储相同对象的副本。

我不确定我是否错误地使用了ObjCMongoDB框架,或者我是否需要使用SyncServices将数据导入到我的核心数据模型中?

有没有人能给我指点或举个例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 21:37:33

ObjCMongoDB (我是它的作者)对核心数据执行反序列化,但目前不是重复数据删除或同步。它将BSON文档视为简单的有序字典,没有标识属性的含义。特别是,它将_id视为任何其他键。

你可以得到你想要的行为,但是你需要自己去实现它。

最简单的方法是在您的NSManagedObject子类中实现-awakeAfterUsingCoder:-awakeAfterUsingBSONDecoder: -无论是哪一个。解码器将自动调用这些函数。

self将是新的反序列化对象。运行fetch请求以查找self重复的现有条目。如果找到,请将属性应用于现有对象,从上下文中删除新对象,然后返回现有条目。如果没有找到,只需返回self即可。

您可以使用-dictionaryWithValuesForKeys:-setValuesForKeysWithDictionary:来完成此任务,我通常使用如下方法获得一个键列表:

代码语言:javascript
复制
+ (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];
}

补充道:如果你不需要排除瞬态属性,你可以用一行来应用这些值:

代码语言:javascript
复制
[target setValuesForKeysWithDictionary:[self dictionaryWithValuesForKeys:self.entity.attributesByName.allKeys]];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17700584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档