2013-08-13 1 views
0

Я настроил новый проект RubyMotion и успешно подключил JSON к простым рубиновым объектам. Я бы хотел, чтобы один из атрибутов был датой, но я не знаю, как заставить RestKit выполнять преобразование для меня.Как мне получить RestKit для форматирования даты при использовании RubyMotion

Я знаю, как установить форму даты, но как RestKit знает, к каким атрибутам применить форму даты? Я предполагаю, что когда это делается в Objective-C, выводится тип данных. Есть ли все-таки, чтобы добиться этого с помощью рубина?

Модель:

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

Mapping:

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

ответ

0

Если свойство, что значение сопоставляемое является NSDate того RestKit, при чтении, будет применяться каждый из настроенных форматтеров данных в JSON, пока один из них не вернет объект, не содержащий nil. При сериализации только preferredDateFormatter используется для генерации строки с даты.

+0

Да, хорошо. Так что это все еще моя проблема. Поскольку ruby ​​динамически типизирован, как я могу указать, что атрибуты: created_at должны иметь тип NSDate? Я обновил вопрос, включив в него некоторый пример кода. Вы можете видеть, что нет указанных типов. – Col

+0

А, я вижу, в этом случае это чистый вопрос RubyMotion о классе, используемом для хранения атрибутов. Если все есть 'id', тогда отображение на основе интроспекции будет иметь проблемы ... – Wain

0

Я думаю, что я придумал потенциальную работу. Это работает, но я бы не сказал, что это отличное решение.

Основано на статье Клея Allsopp на Mixing Objective-C and Ruby Я создал версию класса Objective-C моего модельного класса в поставщиках/моделях и указала там свой атрибут NSDate. 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 

Rakefile

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

Если у кого есть лучшее решение, которое я хотел бы услышать его!

Спасибо.

Смежные вопросы