跨类共享属性变量

时间:2014-02-06 16:35:40

标签: objective-c

我有一个我想要存储字符串的类。这个类是一个控制器。现在我想在bController中存储一个字符串,并在cController中存储NSLog字符串。当我尝试这个时,cController中的日志输出始终为null。任何帮助将非常感激。

aController.h:

@interface aController : NSObject

@property (nonatomic, retain) NSString * testingProperty;

aController.m:

#import "aController.h"

@implementation aController

@synthesize testingProperty = _testingProperty;

bController.m:

#import "bController.h"
#import "aController.h"

@implementation bController

-(void)didSomething
{
    aController* aTest = [[aController alloc] init];
    aTest.testingProperty = @"Test String";
}

cController.m

#import "cController.h"
#import "aController.h"

@implementation cController

-(void)didSomethingElse
{
    aController* bTest = [[aController alloc] init];
    NSLog(@"%@",bTest.testingProperty); //output is: (null)
}

1 个答案:

答案 0 :(得分:1)

这是因为您的属性由实例变量支持,因此如果您将新实例分配为nil。如果您需要这样做,您有几个选择。 1,你可以创造一个singelton。 2,你可以声明一个或多个类(+)方法,可以设置和返回一个由静态变量支持的字符串。可能有更多的方法可以做到这一点,但也许最简单的方法是这里列出的第二个。

编辑:

对于您的特定问题,app委托将始终是同一个实例,只需在app delegate.h文件中放置一个属性,并为其分配运行该方法时获得的字符串。然后你就可以得到这样的字符串:

YourAppDelegateClass *appDelegate = (YourAppDelegateClass *)[[UIApplication sharedApplication] delegate];
NSString *string = appDelegate.yourProperty;