您不一定需要與AppDelegate
通信,但您可以通過[[UIApplication sharedApplication] delegate]
。然後,您可以訪問你需要什麼都特性,但你會probabaly需要轉換它:
// 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
類,是爲notifications posted by the app delegate註冊。例如:
@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:
,因爲這是提供給通知中心選擇器。這是該方法時UIApplicationDidEnterBackgroundNotification
張貼通知中心將在您的Cat
類致電:
-(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
}
}
你也可以用UIApplicationWillResignActiveNotification
替代UIApplicationDidEnterBackgroundNotification
。我會把它留給你決定哪個最適合你的需求。
More on using the NSNotificationCenter
。
UPDATE:
第二種方法的優點是沒有必要爲您的Cat
類和應用程序代理之間的任何specfic知識或扶養。兩個對象都可以獨立運行。 [UIApplication sharedApplication]
是可用於在iOS應用程序中運行的任何對象的單例,但您不需要知道確切的類型。所需的唯一具體知識是通知名稱,但即使是全球通用名稱也是如此。
發佈代碼是獲得幫助的最佳方式之一。一些提示,如果您知道具體方法中的問題,請發佈該方法,並使用**相關**錯誤消息。如果我們需要更多,我們會讓你知道。 – 2013-03-03 21:40:16
如果我理解正確,你想在應用程序進入後臺時保存你的Cat類。 – 2013-03-03 21:42:09
@MikeD嗯我真的沒有理解你,但如果你想在這裏的代碼,我可以發佈它,這不是一個問題,如果你對我的問題有問題,我準備回答所有的問題:) – 2013-03-03 21:43:32