CoreDataQuery에서 CRUD를 구현하는 [RubyMotion]

10672 단어 RubyMotionCoreData

개시하다


마지막 "CoreDataQuery를 사용하여 데이터 저장"에서는 CoreDataQuery를 사용하여 데이터를 저장했습니다.
이번에는 콘솔이 아닌 애플리케이션에서 일람, 저장, 업데이트, 삭제를 수행합니다.

차리다


응용 프로그램의 기본 사용저번
이번에는 폼 화면이 있어 화면 구축을 간소화하기 위해 formotionProMotionformotion 조합ProMotion-formotion을 추가했다.
ProMotion-formotion을 사용할 때 현재 ProMotion,formotion은git의 코드를 지정해야 합니다.

Gemfile

source 'https://rubygems.org'

gem 'ProMotion', git: 'https://github.com/clearsightstudio/ProMotion.git'
gem 'formotion', git: 'https://github.com/clayallsopp/formotion.git'
gem 'ProMotion-formotion'
gem 'cdq'
bundle installcdq init
bundle install --path vendor/bundle
bundle exec cdq init
모델을 정의하고 생성할 수도 있습니다.

schemas/0001_initial.rb

schema "0001 initial" do

  entity "Item" do
    string :body
  end

end

app/models/item.rb

class Item < CDQManagedObject

end
app_delegate.rb 지난번과 같다.

app/app_delegate.rb

class AppDelegate < PM::Delegate
  include CDQ
  def on_load(app, options)
    cdq.setup
    open ItemsScreen.new(nav_bar: true)
  end
end

화면 제작


메인 화면을 만들어라.

app/screens/items_screen.rb

class ItemsScreen < PM::TableScreen
  title "Items"

  def load_item
    PM::logger.debug "load_item"
    @items = [
      {
        cells: Item.map do |item|
          {
            title:         item.body,
            action:        :tapped_item,
            arguments:     item,
            editing_style: :delete
          }
        end
      }
    ]
    update_table_data
  end

  def on_load
    set_nav_bar_button :right, title: "Add", action: :open_item_form_screen
  end

  def open_item_form_screen
    open ItemFormScreen.new(nav_bar: true), modal: true
  end

  def on_appear
    load_item
  end

  def table_data
    @items ||= []
  end

  def tapped_item(item)
    open ItemFormScreen.new(item: item, nav_bar: true)
  end

  def on_cell_deleted(cell)
    cell[:arguments].destroy
    cdq.save
  end
end

app/screens/item_form_screen.rb

class ItemFormScreen < PM::FormotionScreen
  title "Item"

  attr_accessor :item

  def on_load
    nav_bar_title = item.nil? ? 'Save': 'Update'
    set_nav_bar_button :right, title: nav_bar_title, action: :save_item
    set_nav_bar_button :left,  title: 'Cancel',      action: :cancel
  end

  def save_item
    if item.nil?
      Item.create(form.render)
    else
      item.body = form.render[:body]
    end
    cdq.save
    close
  end

  def cancel
    close
  end

  def table_data
    value = item.nil? ? "" : item.body
    {
      sections: [
        {
          title: "Item",
          rows: [
            {
              title:       "Body",
              key:         :body,
              type:        :string,
              placeholder: "text here",
              value:       value
            }
          ]
        }
      ]
    }

  end

end
이렇게 되면 응용 프로그램 내에서 일람, 제작, 갱신과 삭제를 할 수 있다.
화면을 한 번 훑어보면 삭제 링크가 나타납니다. "Add"단추를 사용하여 새 화면에
또한 각 항목의 헤더를 통해 편집할 수 있다.

좋은 웹페이지 즐겨찾기