我一直在读ios 5中有一个现在的库,它允许你序列化和反序列化JSON数据.我不能为我的生活找到我的/ Developer文件夹中的示例或框架.任何人都有运气找到/使用这个?如果是这样,请指出我正确的方向?
我正在为我目前正在开发的Core Data应用程序集思广益的云同步解决方案.我计划在完成后为这个代码开源代码,任何人都可以使用他们的核心数据应用程序,所以社区对这个系统应该如何工作的意见非常感谢:-)这就是我在想的:
存储提供商
与所有云同步系统一样,存储是这个难题的主要部分.有很多方法可以解决这个问题.我可以设置我自己的服务器进行存储,或者使用像Amazon S3这样的服务,但由于我现在开始使用0美元资金,此时付费存储解决方案不是一个可行的选择.经过一番思考后,我决定选择Dropbox(一个已经很成熟的云同步应用程序和存储提供商).使用Dropbox的优点是:
如果我决定将来切换到不同的存储提供商,我打算在这个云同步框架中添加"服务",基本上允许任何人创建一个服务类来与他们选择的存储提供商进行交互,然后可以简单地插入框架.
存储结构
这是一个非常困难的部分,因此我需要尽可能多的输入.我一直在考虑这样的结构:
CloudSyncFramework
======> [app name]
==========> devices
=============> (device id)
================> deviceinfo
================> changeset
==========> entities
=============> (entity name)
================> (object id)
Run Code Online (Sandbox Code Playgroud)
这个结构的快速解释:
[[UIDevice currentDevice] uniqueIdentifier]
(在iOS上)或序列号(在Mac OS上)获得.NSKeyedArchiver
.同步同步
这是我几乎完全无能为力的领域之一.我如何处理同时连接和同步云的2台设备?事情似乎很有可能在这里失去同步,甚至数据损坏.
处理迁移
再次,这里另一个无能为力的地区.我如何处理Core Data托管对象模型的迁移?这里最简单的做法似乎就是清理云数据存储并从已经过迁移过程的设备上传数据的新副本,但这似乎有些冒险,并且可能有更好的方法.
将NSManagedObjects转换为JSON
将属性转换为JSON并不是一项非常艰巨的任务(它有很多代码可以在Web上浮动).关系是这里的关键问题.在这个 …
这个问题是对这个问题的跟进.我正在使用http://code.google.com/p/json-framework/上的JSON库.
My Core Data对象模型与其自身具有多对多关系,因此,其子对象具有一个集合.在JSON中,集合通过对象id数组表示.什么都没有异国情调.
当我setValuesForKeysWithDictionary
使用解析json字符串得到的对象结构调用托管对象时,我收到此异常:
***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSArrayM minusSet:]:无法识别的选择器发送到实例0x6c7b440'
如果有人可以解释原因,我会全力以赴.我也从未定义的密钥中收到一些异常但这是可以理解的(JSON包含额外的字段)并且完全可管理.
现在我的问题是:
我在这里遗漏了一些东西,因为在另一个问题中,回答的人和OP没有报告任何这个问题.我可以修补它并通过覆盖setValuesForKeysWithDictionary
和传递来处理错误操作,当密钥是关系时,但这使得代码不那么通用,我非常喜欢.
我们有大量的应用程序,我们从远程Web服务获取数据作为JSON,然后使用解析器将其转换为Core-Data模型.
对于我们的一个应用程序,我认为我们应该做一些不同的事情.
此应用程序具有只读数据,这些数据是易失性的,因此不会在本地缓存很长时间.JSON 与大量嵌套的"对象" 密切相关.文档通常包含不超过20个顶级项目,但可能高达100K.
我认为我不想用100个实体创建Core Data模型,然后使用映射器将JSON导入其中.这看起来像是一首歌和舞蹈.我想我只想简单地将JSON保存在某个地方,并且能够查询它.如果它在iPhone上运行,MongoDB会很好.
iPhone上是否有支持查询的JSON文档存储?
或者,我可以使用一些JSON解析器将数据转换为某种持久性NSDictionary并使用谓词进行查询吗?
或者也许使用SQLite作为在JSON结构上手动创建索引的BLOB存储?
或者,我应该停止抱怨,并使用核心数据?:)
帮助赞赏.
我需要导出一些具有关系的实体,以便在其他iOS设备中导入它.例如:
A.relationship1 <------>> B.relationship1 (one to many)
B.relationship2 <-------> C.relationship1 (one to one)
Run Code Online (Sandbox Code Playgroud)
有没有办法序列化/反序列化(或其他方法)来"轻松"导出/导入核心数据模型的一个片段(由获取的结果控制器获取的对象及其关系?通过序列化所有数据包(NSData或其他东西) ,反序列化并将其插入上下文(导入).
请指出我正确的方向.提前致谢.
假设我有两个对象:文章和类别,两者之间有很多关系.为了这个例子,所有相关的类别都已添加到数据存储中.循环浏览包含文章编辑的数据时,需要保存类别关系信息.
我打算在类中使用该-setValue
方法Article
来设置如下的关系:
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if([key isEqualToString:@"categories"]){
NSLog(@"trying to set categories...");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是value
不是a Category
,它只是一个包含类别标题的字符串(或字符串数组).我当然可以在这个方法中为每个类别进行查找并分配它,但是在一次处理大量文章时这似乎效率低下.另一种选择是填充所有可能类别的数组并只过滤,但我的问题是存储该数组的位置?它应该是一个类方法Article
吗?有没有办法将额外的数据传递给-setValue
方法?是否有另一个更好的选择来设定我没想到的关系?
谢谢你的帮助.
根据Ray Wenderlich的新教程,我能够获取JSON数据并将其存储到Core数据中.我很难理解如何使用Core Data中的关系来做到这一点.
这是我的数据模型:
这是我的JSON:
{
"results": [
{
"name": "Trivia 1",
"objectId": "1000",
"createdAt": "2012-08-31 18:02:52.249 +0000",
"updatedAt": "2012-08-31 18:02:52.249 +0000",
"questions": [
{
"text": "Question 1"
},
{
"text": "Question 2"
},
{
"text": "Question 3"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
最后,我在这里设置了managedObject的值:
//Sets values for ManagedObject, also checks type
- (void)setValue:(id)value forKey:(NSString *)key forManagedObject:(NSManagedObject *)managedObject {
NSLog(@"TYPE: %@", [value class]);
//If managedObject key is "createdAt" or "updatedAt" format the date string to an nsdate
if ([key …
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我希望在两个iPhone之间交换通过Core Data管理的信息.
有没有人尝试过这个,如果有的话,这被认为是最好的方法(即人们在文件中使用某些中间格式,如XML或JSON,或者可以直接传输对象).
如果问题在范围内显得过于夸张,我表示道歉,但我正处于需要决定转移方法的阶段,而且我没有使用此API的经验.
对于使用GameKit在设备之间传输对象的任何代码示例或任何此类示例的链接,我将非常感激.
我正在手动进行核心数据迁移,并且继续遇到可可错误134140:NSMigrationMissingMappingModelError。我注意到,只要对模型进行任何更改,即使将属性标记为可选,都可能发生这种情况。到目前为止,发生这种情况时,我发现的唯一解决方案是删除映射模型并创建新的映射模型。有没有更好,更乏味的解决方案?
我有一个带有API的网站,它使用JSON发布信息.我可以很好地访问此API,但我真的希望使用Core Data将信息存储在iPhone应用程序中.有没有办法将持久存储挂钩到JSON API,所以不必使用某种算法让它们保持同步,我只能使用网站作为Core Data的后端.
我希望这很清楚.