- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我尝试同时使用 MagicalRecord + AFNetworking + NSFetchedResultsController 来同步数据并将其动态显示在 map 或 tableView 中。
让我们看一些下载方法的代码:
+ (void) getDataWithCompletionBlock: (void (^)(void)) block {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URL_GET_DATA]];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
for (NSDictionary *dict in JSON) {
[MyModel createOrUpdateMyModelFromDict:[dict mutableCopy]];
}
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveInBackgroundCompletion:^{
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveNestedContexts];
block();
}];
});
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
DDLogError(@"getDataWithCompletionBlock FAILURE: %@", error);
}];
[operation start];
}
我使用 AFJSONRequestOperation
下载数据,然后使用 GCD 和后台线程创建模型,为当前线程保存上下文并执行 successBlock
(MagicalRecord 运行 successBlock
在 dispatch_get_main_queue()
上,因此在 GUI 线程中调用。
这个同步模型可以吗?因为有时(在真实设备上比在模拟器上更常见)我从 NSFetchedResultsController
收到一些错误,例如“索引处没有对象:索引处的部分:”或“CoreData 无法完成错误...”。
他们都暗示,核心数据和多线程环境有问题。有没有人尝试将所有这三种工具连接起来一起工作?如果是这样,我错过了什么?您有适用于该架构的有效代码示例吗?
最佳答案
我建议使用:
[MagicalRecord saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block];
它为您处理线程,因此您不必担心从后台上下文中将任何内容保存到父上下文中。
我强烈建议您阅读这篇博文(由 MagicalRecord Saul Mora 的创建者撰写):IMPORTING DATA MADE EASY .它是关于 MagicalRecord 工作原理的非常好的背景信息以及如何使用它的示例。
如果您正确设置了数据模型,您实际上可以让 MagicalRecord 为您完成所有映射,您所要做的就是在 saveWithBlock:
block 中调用 importFromObject:
而且您不必担心处理映射。我上面链接的文章详细介绍了如何正确执行此操作,但这需要一些练习。
关于ios - MagicalRecord + AFNetworking + NSFetchedResultsController,如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559177/
我如何在 MagicalRecord 中为此找到替换方法(已弃用)?我看过谷歌、SO 和文档;似乎没有什么可以替代,当然,文档中没有任何内容告诉您是什么取代了已弃用的方法。 :-{ [[NSManag
我的服务器以“yyyy-MM-dd'T'HH:mm:ss'Z'”格式提供UTC日期,例如MST 的 11 月 15 日午夜是“2013-11-15T07:00:00Z”。这种格式是 MagicalRe
我像这样设置我的 MagicalRecord 堆栈: MagicalRecord.setupAutoMigratingCoreDataStack() let moc = NSManagedObject
@编辑@PangHoMing - 我会再次一步一步地做。首先设置 - 按照您的建议 MagicalRecord.setLoggingLevel(.verbose) MagicalRec
大家好, 我正在使用 MagicalRecord 并尝试删除两个实体之间建立的关系 联系>组 一个联系人可以与多个组相关,一个组也可以与多个联系人相关。 比如Ben在第1组,Alex也在第1组,我想把
我正在从我无法控制的网络服务中导入 JSON 响应。此响应包含我映射到 Show 实体的元素,该实体在同一 JSON 中具有多个相关的 Artwork 对象。 我通过 userinfo 键建立了关系,
似乎我什么都试过了,但似乎只在主线程中有效。例如: [SomeClass MR_createEntity]; [[NSManagedObjectContext MR_defaultContext] M
我使用 MagicalRecord 作为处理 Core Data 的一个很好的库。我的问题是如何在我的应用程序进入后台之前保存数据。因为我尝试通过 block 写入数据,当然它不会工作,因为应用程序将
我是 MagicalRecord 的新手。我在通过不同方法更新相同实体时遇到问题。这是我的例子:我有一些从网络服务获得的广告。完成后,如果有任何事件属性设置为 0,我需要更新数据库中的广告。我需要立即
我想知道为什么我的核心数据停止保存更改。事实上,上面的代码几小时前就可以工作了。当我尝试打印出错误时,它打印出 (null)。下面的代码是 NSManagedObjectSubclass 的自定义方法
我正在开发一款游戏,我正在使用 MagicalRecord 来存储高分。该游戏有 4 种模式和 2 种“类型”,因此有 8 种组合可供选择,我想为每一种组合打高分。我正在使用这个逻辑: NSArray
我尝试获取用户保存在应用程序中的所有元素(这可能很容易),从每条记录中获取一个属性并将这些属性列在一个字符串中(这就是问题所在)。我该怎么做?我写了一些东西,但我认为这不是正确的方法。请帮助我! -
我有这个代码: HLMReferenceData *referenceDataObj = [HLMReferenceData createEntity]; [MagicalRecord saveWit
我正在使用返回结果的网络服务,如下例所示: { "name":"Frank", "meals":[ "cheeseburger", "lasagne" ] }
我正在尝试将数据导入 Core Data 并使用 MagicalRecord 将其保存在后台线程中。 我基本上是在尝试这样做: __block User *user = nil; [MagicalRe
对于每次应用程序更新,我都想彻底删除我的整个 Core Data 数据库,然后重新设置它。我没有成功这样做。我尝试了各种方法,这似乎是我最接近的方法。我找到了几个 SO 帖子,但没有一个解决方案适合我
在 iOS5.0 中,使用 arc,我使用 Magical record 在核心数据中创建对象。我有一个产品对象,它与 Promotion 对象具有称为“currentPromotions”的一对多关
我有以下格式的日期: 2013-05-04T05:07:09+00:00 我正在使用 MagicalRecord 自动映射 NSDate。据我所知,上述日期格式应符合 MagicalRecord 的默
我有以下代码: dispatch_async(dispatch_get_main_queue(), ^{ NSManagedObjectContext *localContext = [NSM
我正在尝试 MagicalRecord 的一些非常基本的实现,以掌握它并遇到以下问题。 当我保存一个条目然后获取该类型的条目时,它会出现我刚刚保存的条目。但是,当我保存条目、关闭应用程序、重新启动它然
我是一名优秀的程序员,十分优秀!