Как загрузить данные ячейки табличного представления RubyMotion из файла
Я начинаю с RubyMotion и ProMotion. Я создаю табличное представление и хотел бы переместить данные во внешний файл, чтобы им было легче управлять. Вот что у меня так далеко:
class MasterScreen < PM::TableScreen
title 'States'
def table_data
[{
title: "Northwest States",
cells: [
{ title: "Oregon", action: :view_details, arguments: { state: @oregon }},
{ title: "Washington", action: :view_details, arguments: { state: @washington }}
]
}]
end
def view_details
open DetailScreen.new(nav_bar: true)
end
end
Я хотел бы переместить имена состояний (в основном заголовки ячеек) в нечто вроде файла YAML или JSON, который я могу загрузить и повторить. Как мне достичь чего-то подобного?
Обновление: мне удалось выяснить, как загрузить текст из файла.
Сначала я добавил bubble-wrap
к моему Gemfile
и побежал bundle install
, BubbleWrap предоставляет вспомогательный метод App.resources_path
,
В my_app/resources/states.txt
У меня есть список состояний, разделенных новыми строками:
Oregon
Washington
Foobar
В моем контроллере табличного представления я читаю файл и разбиваю его на массив строк.
class MasterScreen < PM::TableScreen
title 'States'
def on_load
data = File.read("#{App.resources_path}/states.txt")
@states = data.lines
end
def table_data
[{
title: "Northwest States",
cells: @states.map do |state|
{
title: state,
action: :view_details,
arguments: { state: state }
}
end
}]
end
def view_details(arguments)
open DetailScreen.new(nav_bar: true, title: arguments[:state])
end
end
Это работает, но это только часть того, что я пытался сделать. Я все еще хотел бы использовать такую структуру, как YAML, для представления заголовков и субтитров. Каким будет способ RubyMotion делать подобные вещи?
1 ответ
Разобрался, как это сделать. Я наткнулся на драгоценный камень RubyMotion под названием motion-yaml
, Просто добавьте его в свой Gemfile, добавьте свой файл YAML в свой resources
каталог, и используйте его, как вы бы YAML в Ruby.
data = YAML.load(File.read("#{App.resources_path}/my_yaml_file.yml"))
Примечание: вам нужно будет добавить bubble-wrap
в ваш Gemfile, чтобы иметь App.resources_path
, Я не уверен, есть ли простой способ сделать это без пузырчатой упаковки.