0

メモを保存する小さなアプリで遊んでいます。UI は、マスター/詳細ビュー テンプレートを使用します。

Myは、配列に格納されているすべてのメモを順番にMasterView保持するインスタンスを保持します。NoteControllerを使用してこの配列を保存したいと思いますNSKeyArchiverapplicationDidEnterBackGroundで実装されているメソッドがあることは知っていAppDelegate.mます。

NoteControllerしかし、 fromのインスタンスメソッドが呼び出せませんAppDelegate。すべてのデータが失われるため、新しいインスタンスを作成しても機能しません。では、私のデザインの何が問題なのですか?

私の問題が明確であることを願っています。よろしくお願いいたします。

注.m:

@interface Note : NSObject

@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *content;
@property (nonatomic, strong) NSDate *creationDate;

@end

NoteController.m:

@class Note;
@interface NoteDataController : NSObject

@property (nonatomic, retain) NSMutableArray *masterNoteList;
@property (nonatomic, copy) NSString *dataFilePath; 

- (NSUInteger) countOfList;
- (Note*) objectInListAtIndex:(NSUInteger)theIndex;
- (void) addNote:(Note*)theNote;
- (void) removeNote:(NSUInteger)theIndex;
- (void) loadMasterList;
- (void) saveMasterList;

@end
4

3 に答える 3

0

[NSNotifcationCenter defaultCenter]fromを使用してNSNotification を投稿しapplicationDidEnterBackground:ます。

そこで、タスクを終了できることに注意する必要があります。

このメソッドの実装では、タスクを実行して戻るまでに約 5 秒かかります。最終タスクを実行するために追加の時間が必要な場合は、beginBackgroundTaskWithExpirationHandler: を呼び出して、システムから追加の実行時間を要求できます。実際には、できるだけ早く applicationDidEnterBackground: から戻る必要があります。時間切れになる前にメソッドが戻らない場合、アプリケーションは終了し、メモリから消去されます。

このメソッドが終了する前に、ユーザー インターフェイスの調整に関連するすべてのタスクを実行する必要がありますが、他のタスク (状態の保存など) は、必要に応じて同時ディスパッチ キューまたはセカンダリ スレッドに移動する必要があります。applicationDidEnterBackground: で開始したバックグラウンド タスクは、そのメソッドが終了するまで実行されない可能性が高いため、これらのタスクを開始する前に追加のバックグラウンド実行時間を要求する必要があります。つまり、最初に beginBackgroundTaskWithExpirationHandler: を呼び出してから、ディスパッチ キューまたはセカンダリ スレッドでタスクを実行します。

コントローラーにこの通知をリッスン (登録) させ、通知を受信した場合は保存を実行します。

于 2013-05-21T12:52:53.563 に答える
0

Noteできるだけ早く保存することをお勧めします。したがって、-addNote:それNoteが完全に理解された場合(タイトル、コンテンツなどがある場合)、追加してその場で保存してください。また-removeNote:、「メモ ファイル」も保存します。

これにより、問題が簡素化され、 のすべての管理が にカプセル化され、何らかの方法で にジャックするなどの操作を行う必要がなくなりNotesます。NoteControllerAppDelegate

ただし、このアプローチがうまくいかない場合、アプリがバックグラウンドに入ったときに保存する必要がある場合は、NoteController観察UIApplicationDidEnterBackgroundNotificationし、NoteControllerその目的で保存するためのハンドラーを用意することができます。バックグラウンドに入ったときに保存するのは理想的ではない可能性があることに注意してください。それが起こる前にアプリが終了した場合 (クラッシュなど) はどうなるでしょうか? また、バックグラウンドへの切り替えは時間のかかる作業を行う場合ではないため、Note保存はこの時間には最適ではない可能性があります。

于 2013-05-21T12:53:26.130 に答える