我已经设置了一个新的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
答案 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
如果有人有更好的解决方案,我很乐意听到它!
感谢。