需要帮助我的小 objective-c 类设计.如何访问我的实例变量



我正在玩一个应该存储笔记的小应用程序。UI 使用大纲/细节视图模板。

我的MasterView保存了一个NoteController实例,该实例又保存存储在数组中的所有笔记。现在我想使用 NSKeyArchiver 保存这个数组。我知道有applicationDidEnterBackGroundAppDelegate.m中实现的方法。

但是我无法从AppDelegate调用NoteController的实例方法。创建新实例也不起作用,因为这样所有数据都会丢失。那么我的设计有什么问题呢?

我希望清楚我的问题是什么。非常感谢您的帮助。

注:

@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

我的建议是尽快保存Note。因此,如果您-addNote:Note已完全实现(具有标题,内容等(,则在添加时保留它。同样,当您-removeNote: ,您还将保存您的"笔记文件"。

这简化了事情,将所有Notes管理封装到您的NoteController,并避免了不得不做一些事情,例如以某种方式进入AppDelegate

但是,如果此方法对您不起作用,如果您确实需要在应用程序进入后台时保存,则可以让您的NoteController观察UIApplicationDidEnterBackgroundNotification并且NoteController有一个用于该端保存的处理程序。请注意,进入后台时保存可能并不理想:如果您的应用程序在此发生之前退出(例如崩溃(怎么办?此外,切换到背景不是从事冗长任务的时候,因此您的Note保存可能不适合这个时间。

使用 applicationDidEnterBackground: 中的[NSNotifcationCenter defaultCenter]发布 NSNotization。

在那里,您必须注意您的任务可以完成:

此方法的实现有大约五秒钟的时间来执行任何任务并返回。如果需要额外的时间来执行任何最终任务,可以通过调用beginBackgroundTaskWithExexpationHandler:从系统请求额外的执行时间。在实践中,您应该尽快从applicationDidEnterBackground返回。如果该方法在时间用完之前未返回,则应用程序将终止并从内存中清除。

在此方法退出之前,应执行与调整用户界面相关的任何任务,但其他任务(如保存状态(应根据需要移动到并发调度队列或辅助线程。由于在 applicationDidEnterBackground: 中启动的任何后台任务很可能在该方法退出之前才会运行,因此应在启动这些任务之前请求额外的后台执行时间。换句话说,首先调用beginBackgroundTaskWithExexpationHandler:,然后在调度队列或辅助线程上运行任务。

让您的控制器侦听(注册(此通知并执行保存(如果收到通知(。

您可以在 NoteController 类中实现单例模式,以便始终在内存中保留该类的一个实例,并且还可以从任何类(包括 AppDelegate(访问该实例。

最新更新