私は RubyMotion と MotionModel を試してきました。MotionModel チュートリアル全体 ( https://github.com/sxross/MotionModel/wiki/Tutorial ) を実行しましたが、モデル データのシリアル化と永続的な保存については説明していません。
データをシリアル化して保存し、通知を使用してフォーム データを (再) ロードできましたが、アプリの起動時にモデル データを適切にロードできないようです。空の tableView を取得し、モデルの新しいインスタンスを作成すると、すべてのデータが一度に表示されます。私はそれが単純なことだと知っていますが、私はそれを見ていません。
AppDelegate:
class AppDelegate
attr_reader :window
def application(application, didFinishLaunchingWithOptions:launchOptions)
controller = EntryController.alloc.init
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
@window.rootViewController = UINavigationController.alloc.initWithRootViewController(controller)
@window.rootViewController.wantsFullScreenLayout = true
@window.makeKeyAndVisible
Entry.deserialize_from_file('entries.dat')
true
end
end
コントローラ:
MotionModelDataDidChangeNotification = 'MotionModelDataDidChangeNotification'
class EntryController < UIViewController
def viewDidLoad
super
self.title = "Entries"
@entry_model_change_observer = App.notification_center.observe MotionModelDataDidChangeNotification do |notification|
if notification.object.is_a?(Entry)
reload_data
end
end
#create and add tableview
@table = UITableView.alloc.initWithFrame([[0,0],[320,480]])
@table.dataSource = @table.delegate = self
self.view.addSubview @table
##adds top right "new" button
right_button = UIBarButtonItem.alloc.initWithBarButtonSystemItem(UIBarButtonSystemItemAdd, target:self, action:"new_entry")
self.navigationItem.rightBarButtonItem = right_button
end
def viewWillDisappear(animated)
App.notification_center.unobserve @task_model_change_observer
end
def reload_data
@entries = Entry.all
@table.reloadData
end
def new_entry
Entry.create :details => "New entry"
end
def numberOfSectionsInTableView(view)
1
end
def tableView(tableView, numberOfRowsInSection: section)
Entry.count
end
def tableView(tableView, cellForRowAtIndexPath: indexPath)
@reuseIdentifier ||= "entry_cell"
cell = tableView.dequeueReusableCellWithIdentifier(@reuseIdentifier) || begin
UITableViewCell.alloc.initWithStyle UITableViewCellStyleSubtitle, reuseIdentifier:@reuseIdentifier
end
entry = @entries[indexPath.row]
cell.textLabel.text = entry.details
cell.detailTextLabel.text = entry.details
cell
end
def tableView(tableView, didSelectRowAtIndexPath:indexPath)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
end
end
reload_data
そのメソッドのコードのさまざまな表現を 呼び出して内部に埋め込んでみましviewDidLoad
たが、どこにも行きませんでした。どんなガイダンスも大歓迎です!