2016-04-25 17 views
0

Ich möchte ein NSString von Viewcontroller A zuzugreifen, wenn I in View-Controller-B amAbrufen Eigenschaft aus einer anderen Ansicht Controller

IN Viewcontroller A .H

@property (nonatomic,strong) NSString *test; 

IN A .M Viewcontroller

@synthesize test; 

// view did load 

test = @"dikke bertha"; 

IN ViewCon TROLLER B · H

#import "ViewcontrollerA.h" 

@property (weak, nonatomic) ViewcontrollerA *VCA 

IN B .M Viewcontroller

synthesize VCA; 

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

DIE NULL NSLog TURN ...

+0

Erstellen Sie eine Instanz von 'ViewcontrollerA' und weisen Sie sie der Eigenschaft' VCA' zu? – rmaddy

+0

Es liegt daran, dass die Eigenschaft ViewcontrollerA * VCA gleich Null ist. Sie haben es deklariert, aber Sie haben keine Instanz von ViewControllerA zugewiesen. –

+0

@ rmaddy-können wir Singleton für diesen Zweck verwenden, so dass wann immer wir eine Instanz des View-Controllers wollen, können wir nur [VC sharedInstance]? –

Antwort

0

Um es zu machen, so dass die Zeichenfolge in der Klasse erscheint 2 Wie Sie es in einer anderen Klasse (Klasse 1) deklariert haben, müssen Sie es so einrichten, dass das Initialisieren eines Objekts der Klasse 1 der Zeichenfolge auch einen Wert zuweist. Beispielsweise.

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); 
} 

Wenn Sie eine bestimmte initializer in ViewControllerA schaffen, macht es so, dass, wann immer Sie tun:

ViewControllerA *viewControllerAObject = [ViewControllerA alloc]init]; 

in einer anderen Klasse, können Sie ein ViewControllerA Objekt machen, die mit einem bestimmten Textzeichenfolge kommt, wenn es initialisiert wird.

+0

Dies deckt die Situation des OP nicht ganz ab. Sie haben eine Eigenschaft für den anderen View-Controller. Aktualisieren Sie Ihre Antwort, um die Frage besser zu erfüllen. – rmaddy

+0

Okay - geändert, um genauer zu sein. @ Kraddy –

Verwandte Themen