swiftでiosアプリ開発の勉強中で、mvcのmodelについて調べているのですがちょっとわからなくなったので教えて下さい
まず、modelはシングルトンで実装する。ものなのでしょうか?
作りたいのは以下のようなものだとします
・メモの一覧画面(ListViewController)
・メモの詳細画面(DetailViewController)
※一覧画面の情報は外部のapiから取得するものとします
で、やりたかったこととしては詳細画面でデータの変更などを行った場合に一覧画面でも反映させるといったことで、シングルトンなmodelを作って以下のような実装になるのかなと考えました
で、疑問に思ったのがモデルをシングルトンにするとたとえば一覧にはいくつもカテゴリなどがあったとするといきなり破綻する気がしました、、、
こういう場合はモデルにそれぞれのカテゴリごとのlistを持つような実装にするのが一般的なのでしょうか?
モデル
`
ModelMemo: NSObject {
var list: [Dictionary<String,AnyObject>]
func getByApi() { // apiからデータを取得してlistにセット } func update() { // apiからデータを更新してlistに反映 }
}
`
一覧画面
`
class ListViewController: UIViewController {
var memos: ModelMemos
override func viewDidLoad() { self.memos = ModelMemos・・・->getInstance() self.memos->getByApi() }
}
`
詳細画面
`
class DetailViewController: UIViewController {
var memos: ModelMemos
override func viewDidLoad() { self.memos = ModelMemos・・・->getInstance() var memo = self.memos->getByRow(行番号とか) } func updateMemo() { self.memos.update() }
}
`
mvcとかあんまりわかってないので全然ちがってたらすみませんが、どなたかご教授いただけないでしょうか
__moaiさんへ
実装したい機能のイメージとしては以下のようなものになります
- セグメントコントロールに新着・人気がある
- セグメントコントロールの下にリストがある(テーブルビューで実装)
- リストの各セルにはブックマークボタンがあり、登録中・解除中で色が変わる
- リストのセルをタップすると詳細画面へ遷移する
- 詳細画面にもブックマークボタンがある
で、悩み出した原因としては詳細ページでブックマークして一覧に戻ったときにブックマークの状態をリストにも反映させなくてはいけないなというところから始まりました。
また、セグメントコントロールを切り替えた際にも同様の問題が起きえます
そして今検討中のコードが以下のようなものになります
`
class ModelDemo : NSObject {
// 新着リスト・人気リスト
dynamic var list: [Dictionary<String,AnyObject>] = Dictionary<String,AnyObject>
dynamic var list2: [Dictionary<String,AnyObject>] = Dictionary<String,AnyObject>
class var sharedInstance : ModelNotes { ・・・ } // APIの処理など
}
// 一覧ページ
class ListViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// リストデータの監視 ModelDemo.sharedInstance.addObserver(self, forKeyPath: "list", options: .New, context: nil) // apiでのデータ取得 ModelDemo.sharedInstance.getList() } // データの監視 override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { tableView.reloadData() } // ブックマーククリック func onclickBookmark(sender: UIButton) { // apiをたたいて更新 ModelDemo.sharedInstance.update(・・・) // 画面更新のためにこちらも更新 ModelDemo.sharedInstance.list[sender.tag]["isBookmark"] = true }
}
// 詳細画面
class DetailViewController: UIViewController {
// 選択された行番号
var row: Int!
// ブックマーククリック func onclickBookmark(sender: UIButton) { // apiをたたいて更新 ModelDemo.sharedInstance.update(・・・) // 画面更新のためにこちらも更新 ModelDemo.sharedInstance.list[row] = true }
}
`

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。