【问题标题】:How do I get RestKit to format a date when using RubyMotion使用 RubyMotion 时如何让 RestKit 格式化日期
【发布时间】:2013-08-14 16:47:39
【问题描述】:

我已经设置了一个新的 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

【问题讨论】:

    标签: date restkit rubymotion formatter


    【解决方案1】:

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

    【讨论】:

    • 是的,好的。所以这仍然是我的问题。由于 ruby​​ 是动态类型的,我如何指定 :created_at 属性应该是 NSDate 类型?我已经更新了问题以包含一些示例代码。可以看到没有指定类型。
    • 啊,我明白了,在这种情况下,这是一个关于用于存储属性的类的纯 RubyMotion 问题。如果一切都是id,那么基于内省的映射就会有问题......
    【解决方案2】:

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

    根据 Clay Allsopp 在 Mixing Objective-C and 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
    

    models/sample_model.rb

    class SampleModel
      attr_accessor :id, :name
    end
    

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

    谢谢。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2021-05-14
      相关资源
      最近更新 更多