在使用RubyMotion时如何让RestKit格式化日期

时间:2013-08-13 12:51:41

标签: date restkit rubymotion formatter

我已经设置了一个新的RubyMotion项目,并将一些JSON成功映射到普通的ruby对象。我想将其中一个属性作为约会,但我不知道如何让RestKit为我做转换。

我知道如何设置日期格式化程序,但RestKit如何知道应用日期格式化程序的属性?我假设在Objective-C中完成此操作时,推断出数据类型。 无论如何用ruby来实现这个目标吗?

型号:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

根据Clay Allsopp关于Mixing Objective-C and Ruby的文章,我在供应商/模型中创建了我的模型类的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

Rake文件

# -*- 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

如果有人有更好的解决方案,我很乐意听到它!

感谢。