2011-01-09 12 views
0

私はiPhoneプログラミングの初心者です。あるビューコントローラから別のビューコントローラにメッセージを送信しようとしています。考え方は、viewControllerAがユーザーからの情報を取得し、それをviewControllerBに送信することです。 viewControllerBはラベルに情報を表示することになっています。Obj-Cクラス間のメッセージの送信

viewControllerA.h

#import <UIKit/UIKit.h> 
@interface viewControllerA : UIViewController 
{ 
    int num; 
} 

-(IBAction)do; 
@end 

viewControllerA.m

#import "viewControllerA.h" 
#import "viewControllerB.h" 

@implementation viewControllerA 

- (IBAction)do { 
    //initializing int for example 
    num = 2; 
    viewControllerB *viewB = [[viewControllerB alloc] init]; 
    [viewB display:num]; 
    [viewB release]; 
    //viewA is presented as a ModalViewController, so it dismisses itself to return to the 
    //original view, i know it is not efficient 
    [self dismissModalViewControllerAnimated:YES]; 
} 

- (void)dealloc { 
    [super dealloc]; 
} 

@end 

viewControllerB.h

​​

viewControllerB.m

#import "viewControllerB.h" 
#import "viewControllerA.h" 

@implementation viewControllerB 

- (IBAction)openA { 
    //presents viewControllerA when a button is pressed 
    viewControllerA *viewA = [[viewControllerA alloc] init]; 
    [self presentModalViewController:viewA animated:YES]; 
} 

- (void)display:(NSInteger)myNum { 
    NSLog(@"YES"); 
    [label setText:[NSString stringWithFormat:@"%d", myNum]]; 
} 

@end 

YESは正常にログに記録されますが、ラベルのテキストは変更されません。私は インターフェイスビルダのすべての接続が正しいことを確認しました。実際にはこの非常にラベルのテキストを変更する私のプログラムの他の(IBAction) メソッドがあり、これらのメソッドはすべて完全に動作します...

アイデア、みんな?あなたは私に完全な解決策を与える必要はありません。あらゆる情報が役立ちます。ありがとう。

viewControllerB *viewB = [[viewControllerB alloc] init]; 

は、新しいviewControllerBをインスタンス化していると

+0

IBActionメソッドが単一の '(id)sender'パラメータを取ることを伝えてください。 – Abizern

+0

ps。本当にあなたの質問ではなく、メモリリークを注意してください。 'alloc'(または' copy'、 'new'、' retain')の後には 'release'または' autorelease'が続きます。 – mvds

+0

@Abizern彼らは必須ではありません。 http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006728-CH3-SW31で指定されているフォームに一致します。 –

答えて

1

。これはあなたがあなたのnibファイルにあると私は推測しているviewControllerBではありません。あなたはそれのためのコンセントを作ってそれを結線する必要があります。

そうでない場合は、おそらくだけではなく[... init]の、ペン先から[... initWithNibName:]でそれをインスタンス化した後、(いずれかの方法)[self.navigationController pushViewController:viewB animated:YES]を使用してインスタンス化ビューコントローラをプッシュするか、すでに習得しているように見えるとして、モーダル、それを提示することもできます。

viewcontroller変数にはviewConBという名前を付けることもできます。ビューとビューの間に明確で重要な違いがあるため、コントローラです。さらに、クラス名は、大文字で始まり、小文字の変数で始まる傾向があります。

+0

viewControllerAでBをインスタンス化していたので、viewControllerAのファイルでviewControllerBのコンセントを作る方法はありますか? – user544359

+0

alloc/initのみを使用してViewControllerをインスタンス化すると、nibファイル全体が再生されません。 alloc/initの後に、アウトレット変数を手作業で設定する必要があります。 'viewB.someProperty = self;'を設定すると – mvds

関連する問題