如何使变量可用于全球目标c

时间:2013-07-29 07:27:22

标签: ios objective-c xml

在使用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调用中需要令牌。

6 个答案:

答案 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/

另请阅读:Are global variables bad?

答案 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;