1

我有一个与此处构建的非常相似的 iOS 应用程序:https ://devcenter.heroku.com/articles/ios-core-data-buildpack-app - 即Core DataAFIncrementalStore,但使用自定义 Rails 3.1 服务器服务JSON。

我有两个类似性质的问题:

  • Rails 有一个名为 的属性id,但这是 Objective-C 中的保留字,所以我想activityId在 iOS 应用程序中将其重命名为或类似。我应该在代码中的哪个位置执行此id->activityId翻译?
  • 我所有的日期字段目前都显示(null)在 iOS 应用程序中,我怀疑这是由于 Rails 格式化日期的方式(例如"2012-09-14T11:32:09+02:00")。我应该在 iOS 代码的哪个位置添加我自己的日期解析器?

如果可能的话,我想避免在服务器端生成自定义 JSON。

谢谢!

4

1 回答 1

1

遵循AFIncrementalStore 的 Github 中的“基本示例”,我将 Rails 属性映射到 Core Data 的attributesForRepresentation:ofEntity:fromResponse:

- (NSDictionary *)attributesForRepresentation:(NSDictionary *)representation
                                     ofEntity:(NSEntityDescription *)entity
                                 fromResponse:(NSHTTPURLResponse *)response 
{
    NSMutableDictionary *mutablePropertyValues = [[super attributesForRepresentation:representation ofEntity:entity fromResponse:response] mutableCopy];
    if ([entity.name isEqualToString:@"Activity"]) {
        [mutablePropertyValues setValue:[NSNumber numberWithInteger:[[representation valueForKey:@"id"] integerValue]] forKey:@"activityID"];
    }

    return mutablePropertyValues;
}

也就是说,我沿着这条路走,后来才知道这没有必要,因为 AFIS 会为您保留该映射。请参阅“增强型托管对象模型”部分下的此套牌。这个播客详细介绍了它。

至于日期转换,在“推特客户端”示例中使用相同的方法完成:

[mutablePropertyValues setValue:[[NSValueTransformer valueTransformerForName:TTTISO8601DateTransformerName] reverseTransformedValue:[representation valueForKey:@"created_at"]] forKey:@"createdAt"];

希望这可以帮助。

于 2013-06-10T02:50:11.907 回答