0

“令牌”将在身份验证时以带有一些其他元素的 xml 文件的形式给出。

我设法提取了令牌,并将其显示在调用类中,比如说 parser.m。

但是,我需要使该变量的内容全局可用,以便我可以重用相同的令牌。我怎么做?

请注意,在下一次身份验证时将给出不同的令牌。

。H:

@interface Parser : NSObject <NSXMLParserDelegate>{
NSXMLParser *parser;
NSMutableString *element;
NSMutableString *token;}
@property (nonatomic, retain) NSMutableString *token;
@end

米:

#import "解析器.h"

NSLog(@"tOKEn 从 main 调用:%@", parser->token);

它无法访问在 parser.m 下声明的“令牌”

我该如何解决这个问题?

更新 1:我发现使用 @public 也可以达到目的。不确定这是否是一个好的举措,因为我在所有 API 调用中都需要令牌。

4

6 回答 6

2

IMO 单例是一个过度使用的诅咒。
您的(每个)应用程序都应该有一个层结构,并且这个令牌变量不应该离开通信层。如果是这样,这意味着您的应用程序设计有问题。请注意,仅在发布帖子时才需要令牌,而代码的所有其他部分都不需要它。

于 2013-07-29T08:14:32.507 回答
2

在目标 c 中为全局变量创建一个单例类

在 .h 文件中

    #import <Foundation/Foundation.h>

    @interface Singleton : NSObject 
    {
            ///......
    }

    + (Singleton *)sharedSingleton;

在 .m 文件中

    #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];   

并在其中创建变量,并在单例类中为该变量编写 setter 和 getter 方法。sinObj使用单例类的对象访问此方法和变量

于 2013-07-29T07:42:47.590 回答
1

对于临时变量,请考虑使用单例实例,例如此答案中说明的 MySingleton 类。如何创建单例:我的 Objective-C 单例应该是什么样的?. 您可以像这样访问变量[MySingleton sharedSingleton].variable:如果你有很多全局变量,单例是一个不错的选择,但如果只有一个,最好使用 NSUserDefaults。

NSUserDefaults 用于需要持久性的东西,即您计划在应用程序启动之间存储它们。好的入门:http: //mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/

另请阅读:全局变量是否不好?

于 2013-07-29T07:37:38.040 回答
0

您可以在您的 appdelegate 中创建一个属性,并在您获得令牌时设置该属性。

//getter
NSString *token=[(MyAppDelegate *)[[UIApplication sharedApplication] delegate].recievedToken;

//setter
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate].recievedToken=token;
于 2013-07-29T08:02:46.833 回答
0

尝试这个:

[[NSUserDefaults standardUserDefaults]setObject:_YourObject_ forKey:@"token"];

NSString *str = [[NSUserDefaults standardUserDefaults] stringForKey:@"token"];

或者您可以使用单例。

于 2013-07-29T07:37:49.417 回答
0

尝试将该变量声明为 Appdelegate 作为属性并在 .m 中合成它。或者使用它在任何类中访问该变量。

AppDelegate * appdelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
    AppDelegate.yourvarible;

或者您使用 NSUserDefault。

[[NSUserDefaults standardUserDefaults]setObject:token forKey:@"tokan"];
于 2013-07-29T07:38:08.787 回答