-3

嗨,我是 ios dev 的新手,我正在尝试从委托类和其他类访问设置 nsstring 的值,我得到的值为 null。我不知道我在做什么错误?

//token class header file
@interface TokenClass : NSObject
{
    NSString *tokenValue;
}
@property (nonatomic,strong) NSString *tokenValue;

//token class main file
@implementation TokenClass
@synthesize tokenValue;
@end

//App Delegate
TokenClass *token = [[TokenClass alloc]init];
[token setTokenValue:@"as"];

当我在其他一些类中访问 tokenvalue 时,我得到空值。谁能指出我在做什么错误?我是否正确使用@属性?

4

2 回答 2

2

有很多方法可以实现您想要的:

1.通常我NSUserDefaults用来保存少量数据,即使用户关闭了应用程序,我也需要这些数据。有很多关于如何使用它的信息。在这里查看我的答案

2.在您的 UIViewController 类(例如您的 rootViewController)中创建@property 将保存您的TokenClass. 然后你会过去tokenValueself.tokenClass.tokenValue

3.另一种方法是创建一个单例类,该类将在应用程序的整个运行循环期间可用。单身候选人必须满足三个要求:

  1. 控制对共享资源的并发访问。
  2. 系统的多个不同部分将请求对资源的访问。
  3. 只能有一个对象。

    +(TokenClass*) sharedTokenClass {

    static dispatch_once_t pred;
    static TokenClass *_sharedTokenClass = nil;
    
    
        dispatch_once(&pred, ^{
            _sharedTokenClass = [[TokenClass alloc] init];
        });
        return _sharedTokenClass;
    }
    

    您将在任何您想要的地方使用它 [TokenClass sharedTokenClass]tokenValue];

如果我是你,我会使用第一个变体。

PS。强烈建议您阅读一些内存管理文章以了解对象的生命周期。

于 2013-11-09T05:59:17.360 回答
0

您需要使用 Singleton 类将变量或对象暴露给整个项目或创建全局变量。创建 TokenClass 类的 sharedInstance 并创建可以在任何地方访问的属性

在你的.h文件中

//token class header file
@interface TokenClass : NSObject

@property (nonatomic,strong) NSString *tokenValue;

//create static method 
+ (id)sharedInstance;

.m文件中

#import "TokenClass.h"

@implementation TokenClass


#pragma mark Singleton Methods

+ (id)sharedInstance {
    static TokenClass *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

- (id)init {
  if (self = [super init]) {
      tokenValue = [[NSString alloc] init];
  }
  return self;
}

@end

现在在你的 appDelegate

#import TokenClass.h

@implementation AppDelegate

in `didFinishLaunchingWithOptions:`

 [TokenClass sharedInstance] setTokenValue:@"as"];

在任何课程中,您都可以使用

NSLog(@"tokenValue = %@", [[SingletonClass sharedInstance] tokenValue]);
于 2013-11-09T06:07:50.300 回答