【问题标题】:Crash when using RestKit with ios 5 core data concurrency使用带有 ios 5 核心数据并发的 RestKit 时崩溃
【发布时间】:2013-03-04 17:25:16
【问题描述】:

我是 Core Data 的新手,也是 RestKit。

由于存在一些性能问题,我想在 ios5 中使用并发技术。但是,当它与 RestKit 结合时,就出现了崩溃问题。这是我的崩溃代码:

[[RKObjectManager sharedManager] getObjectsAtPath: HOT_PATH
                                       parameters: params
                                          success:
 ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    NSManagedObjectContext *newContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
     newContext.parentContext = [self managedContext];
     [newContext performBlock:^{

         Rumor *rumorInOtherContext = (Rumor *)[mappingResult.array lastObject];;
         Rumor *rumor = (Rumor *)[newContext objectWithID:rumorInOtherContext.objectID];

         rumor.updateDate = [NSDate date]; // <- crash at this point.
}];

但是,我的旧版本代码不会崩溃:

[[RKObjectManager sharedManager] getObjectsAtPath: HOT_PATH
                                       parameters: params
                                          success:
 ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    Rumor *rumor = (Rumor *)[mappingResult.array lastObject];;
    rumor.updateDate = [NSDate date]; // <- save!
}];

控制台对话框中没有出现崩溃报告。 :(

我的代码正确吗?或者,是否有其他方法可以做同样的事情?

【问题讨论】:

  • 这是我代码的简化版,后面的做法会变成性能问题,会消除UX。

标签: ios core-data restkit


【解决方案1】:
  1. 您使用的 iOS 目标版本是什么?
  2. 您使用的是哪个版本的 RK?

如果您的目标是 5.x,则不能将基于块的并发编程代码用于 Core Data 或父子上下文。 (是的,它们在 5.x 中被合并到 iOS 中,但在 6.x 之前它不起作用并且不安全)

您可能想查看GCD。

我对 RK 有很多问题,并决定放弃它,就像在这个问题中讨论的那样:

RestKit and saving to CoreData as NSManagedObject

什么是堆栈跟踪(如果您在设备上遇到这种情况,将会有一个崩溃日志,您可以从 Window->Organizer->Devices 访问该日志)告诉您何时崩溃???

【讨论】:

  • 我现在换到iOS 6.1,但还是不行。而RK版本是0.20.0pre4。堆栈跟踪显示崩溃点是rumor.updateDate = [NSDate date]。
  • 您确定 [self managedContext] 已设置(并且不是拼写错误)吗?注销您的“谣言”变量,并确保您确实从新上下文中获取了谣言对象。
  • 我很确定。这是日志:` 2013-03-05 10:16:23.321 谣言 [39050:c07] parentContext = 2013-03-05 10:16:23.321 谣言 [39050:4903] 谣言 = (实体:谣言;id:0xaed7d10 ;数据:)`
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 2014-11-09
  • 2018-07-14
  • 1970-01-01
  • 2017-07-20
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多