2012-04-10 50 views
1

我有一個NSString,作爲如下面我的appdelegate內的一個實例變量:目標C:AppDelegate中的NSString

distributedLCAAppDelegate.h:從distributedLCAAppDelegate.m

@class distributedLCAViewController; 

@interface distributedLCAAppDelegate : NSObject <UIApplicationDelegate> { 
UIWindow *window; 
distributedLCAViewController *viewController; 
NSString *token; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet distributedLCAViewController *viewController; 
@property (nonatomic, copy) NSString *token; 

@end 

部分:

@implementation distributedLCAAppDelegate 

@synthesize window; 
@synthesize viewController; 
@synthesize token; 

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
token = [NSString stringWithFormat:@"%@",deviceToken]; 
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""]; 
token = [token substringWithRange:NSMakeRange(1, [token length]-2)]; 
} 

我需要能夠在視圖控制器中使用這個令牌變量。目前,這是我有:

從內distributedLCAViewController.m部分:

- (IBAction)switchWasActivated:(id)sender 
{ 
    NSString *token2 = [[[distributedLCAAppDelegate alloc] token] autorelease]; 
} 

然而,token2 = 「無效cfstringref」。

我最初嘗試聲明一個名爲getToken的公共方法,它只返回了標記。但在這種情況下,我也遇到了同樣的問題。

任何幫助,將不勝感激!

+0

你確定'didRegisterForRemoteNotificationsWithDeviceToken:'被調用嗎? – jonkroll 2012-04-10 05:05:37

回答

2

試試這個:(修訂版)(固定)

NSString* token2 = ((distributedLCAAppDelegate*)[[UIApplication sharedApplication] delegate]).token; 
+0

Dr.Kameleon和@RIP:當我使用你的代碼時,當我嘗試使用NSLog(@「token2 =%@」,token2); ...在變量窗口中輸入令牌2等於像「/系統/庫/框架/ ..」 – exolaris 2012-04-10 05:16:30

+0

我試着更新的代碼,我得到的是我從其他人的代碼中得到的錯誤。它說「distributedLCAAppDelegate可能不會響應委託」...並且您的更新代碼也給我錯誤「在類型id對象上找不到屬性令牌」 – exolaris 2012-04-10 05:25:53

+0

@exolaris您可以通過Interface Builder將您的應用程序委託鏈接到View Controller (比方說,'myDelegate')並將其設置爲'token2 = myDelegate.token'? – 2012-04-10 05:28:20

2

嘗試以下 -

- (IBAction)switchWasActivated:(id)sender { 
    distributedLCAAppDelegate *delegate = (distributedLCAAppDelegate *) [[UIApplication sharedApplication] delegate]; 
    NSString *token2 = delegate.token; 

}

0
distributedLCAAppDelegate* delegateobj = [(distributedLCAAppDelegate*)[UIApplication sharedApplication] delegate]; 
NSString *token_ = delegateobj.token; 
NSLog(@"token_ :%@",token_); 

試試這個,它應該工作

+0

我在第一行發送警告「distributedLCAAppDelegate * delegateobj = [(distributedLCAAppDelegate *)[UIApplication sharedApplication] delegate];」..警告說「distributedLCAAppDelegate可能不會響應委託」。 – exolaris 2012-04-10 05:19:24

+0

當我運行應用程序。 token_ =「變量此時不是cfstring。」 – exolaris 2012-04-10 05:23:29

0

如果它的委託出口設置爲您的distributedLCAAppDelegate,您可以檢查「MainWindow.xib」中的文件所有者嗎?只需按住Ctrl鍵並單擊Interface Builder中的黃色方框圖標即可。

+0

在IB內部,我點擊了「distributedLCA App Delegate」(黃色框),並在參考插座下:代理連接到文件所有者。這是你在說什麼嗎? 僅供參考:viewController連接到distributedLCAViewController並且窗口連接到Window。 這些都是我在distributedLCA應用程序委託下看到的所有連接。 – exolaris 2012-04-10 06:17:03

+0

這似乎是好的,所以這不是問題在這裏。對不起,別有其他想法... – blauzahn 2012-04-10 06:23:59