特定の機能を実装するための最良の方法を知りたいです。ユーザーが作成するメッセージコンポーザービューがありますNSManagedObject MessageObject
。ObjectHelper
グローバルインスタンスが初期化されたクラスもあります。
ユーザーが作成ビューに入るとすぐにバックグラウンド(プライベートキュー)NSManagedObjectContext
を作成します。MessageObject
ここでの注意点は、ObjectHelper
( ComposerViewControllerではなく)がこの新しいオブジェクトの所有者であるということです。これには、強力な参照を持つプロパティ変数があります。
ObjectHelper.h:
@property(nonatomic, strong) MessageObject *newObject;
次に、ComposeViewController
タイマーを設定して、オブジェクトを30秒ごとにディスクに保存します(これにより、自動保存などのドラフトが保存されます。ユーザーが何らかの理由で中断されたり、アプリケーションがクラッシュしたりした場合でも、データは消去されません。 )。
次に、ユーザーが保存ボタンを押したときに、モーダルビューのアニメーションをスムーズに閉じ、関数がメインビューコントローラーにすばやく戻るように、メインスレッドでの作業をできるだけ少なくしたいと思います。したがって、私が行うことはNSDictionary
、メッセージオブジェクトのすべての値を使用してを作成することです。[globalObjectHelperInstance updateNewObjectInstanceWithDictionary:]
newObject
これは、作成ビューの最初に作成されたインスタンスをディクショナリの値で更新し、バックグラウンドスレッドで更新します。
それから私はモーダルを却下します。
ここにいくつか質問があります(できる限り答えてください):
でプロパティインスタンスを作成するよりも、「ドラフト」保存機能を実装するためのより良い方法はあります
ObjectHelper
か?(以外の外部クラスでプロパティインスタンスを作成する理由はComposeController
、オブジェクトでバックグラウンド作業が行われているときにView Controllerが閉じられるため、インスタンス変数にするとメモリから消えてしまうのではないかと心配しています。)プロパティ参照は弱いか強いか?
NSManagedObjectContext
(私が思うに)これらのオブジェクトに保留中の未保存の変更がない限り、はそのオブジェクトを保持することが保証されていないことを私は知っています。何らかの理由で、保存
[backgroundMOC obtainPermanentIDsForObjects:self.newObject error:&error]
する[globalObjectHelperInstance updateNewObjectInstanceWithDictionary:]
前に呼び出すと、EXC_BAD_ACCESSがクラッシュします。これは、自分の状況でメモリを管理する方法と関係があると思います。