2014-02-06 72 views
1

我有一个我想存储字符串的类。这个类是一个控制器。现在我想从bController中存储一个字符串,并在cController中存储NSLog字符串。当我尝试这种情况时,cController中的日志输出始终为空。任何帮助将非常感激。跨类共享属性变量

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) 
} 
+0

意味着'bController didSomething'永远不会被调用。在那里放一个日志语句来验证它是否被调用 –

回答

1

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

编辑:

为了您的具体问题的应用程序委托将永远是相同的实例只是把财产在你的应用程序delegate.h文件,当您运行的方法分配给它,你得到的字符串。然后你可以得到这样的字符串:

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

为什么我不需要这样做?假设我在AppDelegate类中运行“didRegisterForRemoteNotificationsWithDeviceToken:”,并且该方法的输出是设备令牌。如果我想使用该设备令牌字符串让我们说视图控制器或任何其他类...什么是实现这一目标的最佳实践解决方案? – rjm226

+0

作为编辑发布您的问题的答案。希望能帮助到你。 –