2011-12-14 14 views
1

私は自分のクラス用に独自の代理人を持っています。独自のデリゲート - 機能が50%で動作していますが、何かが間違っています

MainMenuViewDelegate

#import <Foundation/Foundation.h> 
@class MainMenuView; 

@protocol MainMenuViewDelegate <NSObject> 

-(void) mainMenuViewLibrary:(MainMenuView*)controller withString:(NSString*)string; 

@end 

MainMenuView.h

#import <UIKit/UIKit.h> 
#import "WorkspaceView.h" 
#import "MainMenuViewDelegate.h" 

@interface MainMenuView : UIView 
@property (nonatomic,weak) id <MainMenuViewDelegate> delegate; 
.... 
@end 

MainMenuView.m

@implementation MainMenuView 
@synthesize delegate; 
... 
-(void)library:(id)sender{ 
//test 
NSLog(@"it's work"); 
NSString *string = @"some text"; 
[delegate mainMenuViewLibrary:self withString:string]; 
NSLog(@"finish"); 

} 

WorkspaceView.h

#import <UIKit/UIKit.h> 
#import "MainMenuViewDelegate.h" 
@interface WorkspaceView : UIView <MainMenuViewDelegate> { 
int menuStatus; 
UILabel *label; 
} 
@property int menuStatus; 
@property (nonatomic, retain) UILabel *label; 
@end 

WorkspaceView.m

#import "WorkspaceView.h" 
#import "MainMenuView.h" 
@implementation WorkspaceView 
@synthesize menuStatus; 
@synthesize label; 
.... 
-(void) mainMenuViewLibrary:(MainMenuView*)controller withString:(NSString*)string{ 
[label setText: string]; 
} 

@end 

は、問題は、私はbtnLibraryを押したときに表示されると-(void)library:(id)sender関数を呼び出します。 コンソールの印刷it's work、私の代理人関数が呼び出されますが、私のラベル(WorkspaceViewに置かれています)に変更が見られず、終了コンソールの出力finishにあります。

+0

メインスレッドで '[delegate mainMenuViewLibrary:self withString:string];が呼び出されていますか? –

+0

@ChrisWagner、私のプロジェクトのメインクラスはMainControllerとWorkspaceViewオブジェクトが初期化されるViewControllerです。 –

答えて

2

オブジェクトがデリゲートとして設定されていないので、デリゲートがnilであるため、nilに送信されたメッセージは消音されます。何も起こりません。

それは問題ではない場合、中のNSLogを置く:あなたのWorkspaceViewに

-(void) mainMenuViewLibrary:(MainMenuView*)controller withString:(NSString*)string; 

とメソッドが呼び出されているかどうかを確認してください。

希望に役立ちます。

+0

非常に可能ですが、私はこれが行われたと仮定しましたが、検証するのは良いことです。 –

+0

うん、私はこれを持っていないが、どうすればこれを追加できますか?どこ?助けてください。私はbtnLibraryをクリックしたときにラベルテキストの新しい値を設定したい。私は初心者です。ありがとうございました。私はこのコードで代理人を理解しようとします。 ) –

+0

MainMenuViewを割り当てる部分のWorkspaceViewで、デリゲートを割り当てます。例:MainMenuView * m = [[MainMenuView alloc] init]; [m setDelegate:self]; – RaffAl

関連する問題