2016-04-25 63 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 –

相關問題