RestKit CoreData和Faults

时间:2015-09-24 17:49:03

标签: ios objective-c core-data restkit

我目前正在开发一个使用Rest API的应用程序,我正在混合使用EntityMapping和ObjectMapping,因为有些静态数据我更喜欢保存在本地存储中而不是其他“实时”数据。我不想打扰。

我会尽可能地总结一下。所以我使用以下类和映射执行标准getObjectsAtPath(我将删除额外的不需要的东西):

PKNewsLocale.h

@interface PKNewsLocale : NSObject
  @property (strong, nonatomic) NSNumber *identifier;

  // PKLanguage is a NSManagedObject kept in Core Data SQLite
  @property (strong, nonatomic) PKLanguage *language;
@end

PKLanguage.h

@interface PKLanguage : NSManagedObject
  @property (nonatomic, retain) NSString * code;
  @property (nonatomic, retain) NSNumber * identifier;
// Other bunch of properties
@end

Rest API JSON响应

{
   id: 2,
   language: 2
}

以及地图部分

RKObjectMapping *getNewsLocaleMapping = [RKObjectMapping mappingForClass:[PKNewsLocale class]];
    [getNewsLocaleMapping addAttributeMappingsFromDictionary:@{
            @"id" : @"identifier",
    }];

RKEntityMapping *language = [RKEntityMapping mappingForEntityForName:@"language" inManagedObjectStore:[RKManagedObjectStore defaultStore]];
    language.identificationAttributes = @[@"identifier"];
    [language addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"identifier"]];
    [getNewsLocaleMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"language" toKeyPath:@"language" withMapping:language]];

这一切都按预期工作。我已经覆盖了PKNewsLocale的setLanguage函数和从CoreData DB获取的语言(通过标识符)并且已正确加载。

问题是,当我到达我的ViewController并尝试访问该对象时,语言实体变成了一个错误(我已经实现了willTurnIntoFault,并且看到它已经完成了)并且数据永远不会被取回,导致错误的PKLanguage实体,其中所有属性都是零。

我有什么遗失的吗?我读到故障托管对象的每个地方都是当我们访问它的任何属性时,它应该回到已实现状态......但似乎并非如此。

修改

在Wain的帮助下挖掘并完成。我已经能够通过继承RKManagedObjectRequestOperation并在成功时添加以下行来解决问题:

[wkSelf.managedObjectContext processPendingChanges];

_并在创建块之前捕获自身上的弱指针。现在我觉得这是RestKit方面的问题,我会在他们的Github上发布一个问题。

0 个答案:

没有答案