这可能是一个愚蠢的问题,但如果我的AppDelegate有一个变量定义如下:
@property (nonatomic, strong) NSString * m_sDevToken;
我也有一个方法:
- (NSString *)getDeviceToken;
在我的.m文件中,我执行以下操作:
@synthesize m_sDevToken;
我为m_sDevToken赋值如下:
m_sDevToken = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
我有这样的方法返回它:
- (NSString *)getDeviceToken
{
return m_sDevToken;
}
我尝试在viewDidLoad的初始View Controller中访问它,如下所示:
BarMateAppDelegate * appDelegate = (BarMateAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%@", [appDelegate getDeviceToken]);
现在,如果我在分配之后立即记录它,它正确的值,但在viewDidLoad方法中它返回(null)。
我对Objective-C有点新,但类似的作业似乎工作正常,所以我做错了什么?
有人可以向我解释为什么它会为空吗?
答案 0 :(得分:1)
将其定义为:
@property (strong) NSString * m_sDevToken;
否则会被解除谴责。
答案 1 :(得分:0)
我猜错了什么,但没有足够的源代码可以确定。
无论哪种方式,将所有m_sDevToken
替换为self.m_sDevToken
都应该有所帮助。
self.m_sDevToken = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
和
- (NSString *)getDeviceToken
{
return self.m_sDevToken;
}
要么这只是开始神奇地工作,否则你会收到错误。如果您收到错误发布错误。
答案 2 :(得分:0)
我根据maddy的输入自己解决了这个问题。由于didRegisterForRemoteNotificationsWithDeviceToken的延迟,我需要在其他地方设置值。调用didRegisterForRemoteNotificationsWithDeviceToken后,我将devToken设置为我对应用程序的设置对象。设置对象保持不变,稍后可在应用程序中使用。