0

我已经设置了一个新的 RubyMotion 项目,并将一些 JSON 成功映射到普通的 ruby​​ 对象。我希望属性之一是日期,但我不知道如何让 RestKit 为我进行转换。

我知道如何设置日期格式化程序,但 RestKit 如何知道将日期格式化程序应用于哪些属性?我假设在 Objective-C 中完成此操作时会推断出数据类型。无论如何用红宝石来实现这一点?

模型:

def SampleModel
  attr_accessor :id, :name, :created_at
end

映射:

def sample_mapping
  @sample_mapping ||= begin
    mapping = RKObjectMapping.mappingForClass(SampleModel)
    mapping.addAttributeMappingsFromArray(["id", "name", "created_at"])
  end
end
4

2 回答 2

0

如果一个值被映射到的属性是一个NSDate然后 RestKit,在读入时,会将每个配置的数据格式化程序应用于 JSON,直到其中一个返回一个非零日期对象。仅在序列化时preferredDateFormatter用于从日期生成字符串。

于 2013-08-13T13:06:39.153 回答
0

我想我已经想出了一个潜在的解决方法。它有效,但我不会说这是一个很好的解决方案。

基于 Clay Allsopp 关于混合 Objective-C 和 Ruby的文章,我在 vendor/models 中创建了我的模型类的 Objective-C 版本,并在其中指定了我的 NSDate 属性。该模型的 Ruby 版本仍然存在,因此我的模型代码的其余部分保留在 ruby​​ 中。它甚至不需要使用继承来获取 NSDate 属性。ruby 模型类只是“重新打开”类并添加额外的属性和行为。

代码

供应商/模型/SampleModel.h

#import <UIKit/UIKit.h>

@interface SampleModel : NSObject

  @property (nonatomic, retain) NSDate * created_at;

@end

供应商/模型/SampleModel.m

#import "SampleModel.h"

@implementation SampleModel

  @synthesize created_at;

@end

耙文件

# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project/template/ios'
...

Motion::Project::App.setup do |app|
  ...
  app.vendor_project('vendor/models', :static)
end

模型/sample_model.rb

class SampleModel
  attr_accessor :id, :name
end

如果有人有更好的解决方案,我很想听听!

谢谢。

于 2013-08-14T08:47:39.347 回答