0

我是 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!
}];

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

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

4

1 回答 1

1
  1. 您使用的是什么目标版本的 iOS?
  2. 你用的是什么版本的 RK?

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

您可能想查看GCD

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

RestKit 并作为 NSManagedObject 保存到 CoreData

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

于 2013-03-04T17:34:06.287 回答