私のアプリケーションでは、コアデータスタックをAppDelegateから、LiftEventDataManager
という独自のクラスに移動しました。私はこのスタックへの参照を取得するいくつかのクラスがあります、そして、私は新しいNSManagedObjectContext
が作成されるたびに、もちろん。これらの参照は、dbからの一部のデフォルトアプリケーションデータをプルする(たとえば、ユーザーの選択肢のリスト)ようにするために使用されます。シングルトンを使用せずに正しいNSManagedObjectContextを保存するにはどうすればよいですか?
最初のviewController
が提示されたとき、私のviewModel
は私のLiftEventDataManager
に新しいオブジェクトのビューをバックするように頼んでいます。ユーザーの入力はこのオブジェクトのプロパティを設定するために使用され、完了したらオブジェクトを保存します。ただし、オブジェクトは保存されていません。
ユーザータップは、保存、viewModel
はLiftEventDataManager
への参照を使用しており、この機能(スウィフト2.3)を呼び出します:
func saveLiftEvent() {
do {
try moc!.save()
} catch {
let saveError = error as NSError
print("\(saveError), \(saveError.userInfo)")
}
NSNotificationCenter.defaultCenter().postNotificationName("LiftEventDidSave", object: nil)
}
私はそれを求めて私のviewModel
によって作成されたので、オブジェクトが保存されていないと信じてLiftEventDataManager
はmanagedObjectContext
となるでしょうが、私が推測しているLiftEventDataManager
によって保存されていると呼ばれているのは、新しいのCore Dataスタックへの参照です。
let moc = newLiftEvent.managedObjectContext
、その後saveLiftEvent(moc: NSManagedObjectContext)
に渡す:私は、私は、オブジェクトのmanagedObjectContext
を取得する可能性があるとします。
適切に保存する方法について自分の質問に答えたのですか、またはデザインに欠陥がありますか?私はシングルトンを使いたくないことを覚えておいてください。
「NSManagedObjectContext」と同じインスタンスが常に必要です。その理由は、AppleがAppDelegateでコアデータスタックを残した理由です。代替は確かに...シングルトンです。どうしたの? – vadian
ダン。ありがとう@vadian。私は今それを修正しました。 – Jim
私のアプリは比較的シンプルなので、シングルトンを必要とする心配はありません。私はまた、私のコードを必要以上に複雑にしたり、単体テストのために作成した面倒を処理したりしたくありません。 – Jim