AppDelegateを使用してiOSアプリケーションのオブジェクト間でデータを共有する方法を説明するソースをいくつか見つけました。私はそれを非常に苦痛なく実装しました、そしてそれは私の状況では良いアプローチのように見えます。AppDelegateを使って何ができるかを考えて、どこに線を引くべきか疑問に思います。
明らかに、 View Controller間でデータを共有したり、 Singletonオブジェクトを使用したり、NSUserDefaultsを使用したりする方法は他にもあります。AppDelegateを使用してデータを共有するのはいつ適切ですか?私の現在の状況では、このアプローチを使用して、プッシュ通知に使用されるappleDeviceTokenを保存しています。ユーザーがアプリにログインまたはログアウトするときに、そのトークンを使用します。
MyAppDelegate.hで、プロパティを宣言します。
@property (nonatomic, retain) NSString *appleDeviceToken;
MyAppDelegate.mで、appleDeviceTokenを合成してから、次のように設定します。
@synthesize appleDeviceToken;
------------------------------------------------------
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSString *devToken = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
appleDeviceToken = devToken;
}
次に、LoginViewController.mでそれを取得し、サーバーに投稿します。
NSString *urlForDeviceTokenPost = [NSString stringWithFormat: @"/api/users/%i/appleDeviceToken", userId];
MyAppDelegate *appDelegate = (MyAppDelegate*) [UIApplication sharedApplication].delegate;
NSString *appleDeviceTokenStr = appDelegate.appleDeviceToken;
AppleDeviceToken *appleDeviceToken = [[AppleDeviceToken alloc] init];
appleDeviceToken.deviceToken = appleDeviceTokenStr;
[[RKObjectManager sharedManager] postObject:appleDeviceToken delegate:self];
これはこれまでのところうまく機能していますが、これは理想的なアプローチですか?他に何を知っておくべきですか?