【问题标题】:RestKit primary key attributeRestKit 主键属性
【发布时间】:2012-01-01 19:56:45
【问题描述】:

我从 json 文件加载数据,然后保存。 我做了两次... 我的 Core Data sqlite 数据库中有两个条目。 即使我在映射中设置了primaryKeyAttribute。

 mapping.primaryKeyAttribute = @"code";
    [mapping mapAttributesFromArray :mappedFields];
    [[RKObjectManager sharedManager].mappingProvider setMapping:mapping forKeyPath:entityName];  

我的杰森

{ "MyEntity": [ { "code" : "axv2","data" : "content"}]};

这里是回调:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {

    NSLog(@"Entries loaded %d",[objects count]);
    lastResult = objects;

    for(MyEntity * myEntity in lastResult) {       
        [self saveContext];       
    }
}

我的实体已正确映射...但是 Restkit 允许保存具有相同主键的重复条目?

很奇怪,我知道这个主键属性可以避免这个问题。

【问题讨论】:

    标签: ios json cocoa core-data restkit


    【解决方案1】:

    不,事实并非如此,因为 Core Data 拥有自己的密钥。您可以通过检查主键是否存在并在保存相关实体实例之前轻松解决此问题。

    【讨论】:

    • 这意味着每次我想保存上下文时,我必须循环托管上下文的每个实体以检查该实体是否存在于 sqlite db 中? Restkit 不提供什么?还是核心数据?
    • 基本上,是的。或者,在创建新项目之前,从数据库中获取它。如果获取返回为空,则创建它,否则甚至不将其插入托管对象上下文。我是这样做的,效率很高。
    • 我有同样的重复问题,但是 Restkit 确实在插入数据库之前提供了检查,但由于某种原因它似乎没有与我(和你)通话。看看我是如何临时“解决”的,直到找到正确答案stackoverflow.com/questions/7799890/…
    • 正是...看我的回答!
    【解决方案2】:

    从最新的 RESTKit 版本 (0.23.2) 开始,您可以像这样定义主键:

    [_mapping addAttributeMappingsFromDictionary:@{ @"id" : @"objectId", @"name" : @"name" }];
    [_mapping setIdentificationAttributes:@[ @"objectId" ]];
    

    而 objectId 是核心数据对象的主键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2018-03-31
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多