在使用xml文件和其他一些元素进行身份验证时,将提供“令牌”。
我设法提取令牌,并将其显示在调用类中,假设是parser.m。
但是,我需要在全局范围内使该变量的内容可用,以便我可以重用相同的令牌。我该怎么做?
请注意,下次身份验证时会给出不同的令牌。
·H:
@interface Parser : NSObject <NSXMLParserDelegate>{
NSXMLParser *parser;
NSMutableString *element;
NSMutableString *token;}
@property (nonatomic, retain) NSMutableString *token;
@end
的.m:
#import“Parser.h”
NSLog(@“tOKEn从main:%@”调用,解析器 - &gt;令牌);
无法访问在parser.m
下声明的“令牌”我该如何解决这个问题?
更新1: 我发现使用@public也是有用的。不确定它是否是一个好的举动,因为我将在所有的API调用中需要令牌。
答案 0 :(得分:2)
在目标c
中为全局变量创建单例类 <。>文件中的
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
{
///......
}
+ (Singleton *)sharedSingleton;
<。>文件中的
#import "Singleton.h"
@implementation Singleton
static Singleton *singletonObj = NULL;
+ (Singleton *)sharedSingleton
{
@synchronized(self)
{
if (singletonObj == NULL)
singletonObj = [[self alloc] init];
}
return(singletonObj);
}
并在另一个文件中使用它
#import "Singleton.h"
//.....
Singleton *sinObj = [Singleton sharedSingleton];
并在其中创建变量,并在singleton类中为该变量编写setter和getter方法。使用单例类
的sinObj
对象访问此方法和变量
答案 1 :(得分:2)
IMO单身人士是一个过度使用的诅咒 您的(每个)应用程序应该具有层结构,并且此标记变量不应该保留通信层。如果这样做意味着应用程序设计出现问题。请注意,仅需要令牌来发布帖子,而代码的每个其他部分都不需要它。
答案 2 :(得分:1)
对于临时变量,请考虑使用单例实例,例如本答案中说明的MySingleton类。如何创建单身人士:What should my Objective-C singleton look like?。
您可以像这样访问变量:[MySingleton sharedSingleton].variable
;如果你有很多全局变量,Singleton是一个很好的选择,但是如果只有一个更好的话可以使用NSUserDefaults。
NSUserDefaults用于需要持久性的内容,即您计划在应用程序启动之间存储它们。好的首发:http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/
答案 3 :(得分:0)
试试这个:
[[NSUserDefaults standardUserDefaults]setObject:_YourObject_ forKey:@"token"];
NSString *str = [[NSUserDefaults standardUserDefaults] stringForKey:@"token"];
或者你可以使用单身。
答案 4 :(得分:0)
尝试将变量声明为Appdelegate作为属性并在.m中合成它。 或者是任何一个班级中使用此变量的女演员。
AppDelegate * appdelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
AppDelegate.yourvarible;
或者您使用的是NSUserDefault。
[[NSUserDefaults standardUserDefaults]setObject:token forKey:@"tokan"];
答案 5 :(得分:0)
您可以在ur appdelegate中创建一个属性,并在获取令牌时设置该属性。
//getter
NSString *token=[(MyAppDelegate *)[[UIApplication sharedApplication] delegate].recievedToken;
//setter
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate].recievedToken=token;