您不一定需要与 通信AppDelegate
,但您可以通过[[UIApplication sharedApplication] delegate]
. 然后,您可以访问所需的任何属性,但您可能需要强制转换它:
// assuming your application delegate is of type 'AppDelegate' - usually the default provided by Xcode
AppDelegate *delegate = (AppDelegate*)[[UIApplication shared application] delegate];
// you can now all you application delegat's properties.
在您的课程中,另一种方法Cat
是注册应用程序委托发布的通知。例如:
@implementation Cat
-(id)init {
if ( (self = [super init]) ) {
// you can also attempt to read stored values form disk here
// perform all your other initialization that you already have
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleNotification:)
name:UIApplicationDidEnterBackgroundNotification
obect:[UIApplication sharedApplication];
}
}
在您的Cat
类中,定义一个方法handleNotification:
,因为它是提供给通知中心的选择器。这是发布时通知中心将在您的Cat
班级上调用的方法UIApplicationDidEnterBackgroundNotification
:
-(void)handleNotification:(NSNotification*)notification {
NSString *name = notification.name;
id sender = notification.object;
if ( [name isEqual:UIApplicationDidEnterBackgroundNotification] && [sender isEqual:[UIApplication sharedApplication] ) {
// save `Cat` class to disk as plist or however you want
}
}
你也可以UIApplicationDidEnterBackgroundNotification
用UIApplicationWillResignActiveNotification
. 我将由您决定哪个最适合您的需求。
更多关于使用NSNotificationCenter
.
更新:
Cat
第二种方法的优点是你的类和应用程序委托之间不需要任何特定的知识或依赖关系。两个对象可以彼此独立运行。这[UIApplication sharedApplication]
是一个可用于 iOS 应用程序中运行的任何对象的单例,但同样,您不需要知道确切的类型。唯一需要的特定知识是通知名称,但即使是这些名称也是全局可访问的。