Как загрузить данные ячейки табличного представления 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, Я не уверен, есть ли простой способ сделать это без пузырчатой ​​упаковки.

Другие вопросы по тегам