2016-04-25 42 views
0

我想从ViewController中阿访问NSString当我在视图控制器B从另一视图控制器获取属性

IN的viewController甲.H

@property (nonatomic,strong) NSString *test; 

IN的viewController甲.M

@synthesize test; 

// view did load 

test = @"dikke bertha"; 

IN VIEWCON TROLLER乙.H

#import "ViewcontrollerA.h" 

@property (weak, nonatomic) ViewcontrollerA *VCA 

IN的viewController乙.M

synthesize VCA; 

NSLog (@"%@", VCA.test) 

的NSLog的TURN NULL ...

+0

您是否创建'ViewcontrollerA'实例并将其分配给'VCA'属性? – rmaddy

+0

这是因为ViewcontrollerA * VCA属性为零。你声明了它,但你没有分配任何ViewControllerA的实例。 –

+0

@ rmaddy-我们可以使用singleton来达到这个目的,所以无论何时我们想要一个视图控制器的实例,我们都可以[VC sharedInstance]? –

回答

0

为了使您的字符串出现在2类使它因为您已经在另一个类(Class 1)中声明了它,所以您需要使其初始化一个Class 1对象也为您的字符串赋值。例如。

ViewControllerA.h:

@interface ViewControllerA : UIViewController 
@property (weak, nonatomic) NSString *test; 
-(instancetype)init; 
@end 

ViewControllerA.m

#import "ViewControllerA.h" 

@interface ViewControllerA() 
@end 

@implementation ViewControllerString 

-(instancetype)init{ 
    self = [super init]; 
    if (self) { 
     _test = @"Testing stuff"; 
    } 
    return self; 
} 

ViewControllerB.h:

#import "ViewControllerA.h" 
@interface ViewControllerB : UIViewController 
@property (strong, nonatomic) ViewControllerA *vcString; 
@end 

ViewControllerB.m:

#import "ViewControllerB.h" 

@interface ViewControllerB() 
@end 

@implementation ViewControllerB 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _vcString = [[ViewControllerA alloc]init]; 
    NSLog(@"%@", self.vcString.test); 
} 

当您在ViewControllerA特定的初始化,这使得它如此,只要你做的事:

ViewControllerA *viewControllerAObject = [ViewControllerA alloc]init]; 

另一个类,你作出这样的配备了一个特定的文本字符串初始化时一个ViewControllerA对象。

+0

这并不完全覆盖OP的情况。他们拥有另一个视图控制器的属性。更新您的答案以更好地匹配问题。 – rmaddy

+0

好的 - 改为更具体。 @rmaddy –

相关问题