2012-02-22 11 views
0

ViewControllerという名前のビューコントローラに文字列を設定して、別の場所にアクセスしようとしています。別のビューコントローラのオブジェクトにアクセスするのが難しい

ViewController.h

NSString *string; 

... 

@property (retain) NSString *string; 

ViewController.m

@synthesize string; 

... 

-(void)viewDidLoad { 

... 

string = @"Test"; 

} 

OtherViewController.m

#import "ViewController.h" 

... 

-(void)viewDidLoad { 

    ViewController *vc; 
    vc = [[ViewController alloc] init]; 

    NSLog(@"String: %@", vc.string); 

} 

しかし、ログが表示されている

String: (null)これはコードです。私は間違って何をしていますか?ありがとう。

+0

代わりに、ビューの上に置くの負荷をした、-initに文字列「= @ 『test』を入れてみてください。 viewDidLoadは、ビューコントローラがステージ上で実際に呼び出されたときにのみトリガされます(表示されます)。ビュー自体が呼び出されない限り、文字列は初期化されません。 –

答えて

0

編集:それは必ずしもあなたが、あなたはまた、あなたのViewControllerクラスでこれを行うことがしたい場合は、ちょうどまたあなたのヘッダーに

-(id)init 

を含めるようにしてください、NSObjectクラスである必要はありません

----(あなたが唯一のその文字列の値を取る必要がある考慮して)あなたが別のビューコントローラにアクセス可能なクラスを作成しようとしているならば、なぜ代わりにビューコントローラのNSObjectのを試してみません

編集の終了

たとえば、10

の場合、そのviewControllerクラスの "global"クラスを呼び出すことができます

これはグローバルです。時間あなたは、可能性があり、あなたは

#import <Foundation/Foundation.h> 

@interface GlobalVar : NSObject 

@property (nonatomic, strong) NSString *myString; 


-(id)init; 

@end 

を設置し、その後、global.mであなたは、あなたがグローバルクラスに含まれる「のmyString」オブジェクトにアクセスする必要があるたびに、この後

#import "GlobalVar.h" 

@implementation GlobalVar 

@synthesize myString; 

-(id)init 
{ 
    self = [super init]; 
    if(self) 
    { 
     myString = [[NSString alloc]initWithFormat:@"the String"]; 
    } 

    return self; 
} 



@end 

を設置しましたヘッダで

を置く:

#import "GlobalVar.h" 
... 
... 
@property (nonatomic, strong) GlobalVar *globalVar; 

実装ファイルで:

あなたが行くそこ ​​

;)

1

は、viewがロードされている場合にのみ呼び出されます。 viewは、必要な場合に遅延ロードされます。 vc.viewへの呼び出しが行われたとき。

私はあなたが達成しようとしていることはよく分かりませんが、これは確かにコードの匂いのようです。

@Fscheidlは、新しいインスタンスを作成していて、既存のインスタンスにアクセスしていないと指摘しているため、これが問題に追加される可能性があります。私はまだあなたの主な問題は、あなたがviewDidLoadあなたはこのインスタンスはstringも設定しなかった[[ViewController alloc] init];を呼び出すことによってViewControllerの新しいインスタンスを作成して行う場合

+0

プロパティは1つのインスタンスにしかアクセスできません。 'vc'を割り当てると、彼はまったく新しいものを作成します – fscheidl

0

されていない、ただviewControllerを作成することで呼び出されていると仮定していることであると信じています。 正確なのインスタンスにViewControllerという名前でアクセスする必要があります。あなたはViewControllerから直接OtherViewControllerのインスタンスを作成した場合

は、あなたがOtherViewController.hに以下を追加することができます

#import "ViewController.h" 
@property (nonatomic, retain) ViewController *previousViewController 

OtherViewControllerを作成し、あなたが設定することができます

//alloc and init instance of OtherViewController 
myOtherViewController.previousViewController = self; 

をごviewDidLoad:でメソッドを使用すると、次のように文字列にアクセスできます。

NSLog(@"String: %@", previousViewController.string); 
関連する問題