我找到了一些资源来解释如何使用 AppDelegate 在 iOS 应用程序中的对象之间共享数据。我已经非常轻松地实现了它,在我的情况下它看起来是一个很好的方法。考虑使用 AppDelegate 可以做什么,我想知道应该在哪里画线。
显然还有其他方法可以跨视图控制器共享数据,使用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];
到目前为止效果很好,但这是理想的方法吗?我还应该知道什么?