简单的委托方法无效。
简单的委托方法无效。
希望能得到一些帮助。
我有一个简单的测试项目:
http://dl.dropbox.com/u/10101053/testDelegate.zip
我想在一个委托方法中传递一个NSString,但是这段代码不起作用。
testDelegateViewController.h
@protocol testDelegateViewControllerDelegate; @interface testDelegateViewController : UIViewController { iddelegate; IBOutlet UIButton *button; } @property (nonatomic, assign) id delegate; @property (nonatomic, retain) IBOutlet UIButton *button; - (void)pass; @end @protocol testDelegateViewControllerDelegate - (void)passSomeToDelegate:(NSString *)some; @end
testDelegateVewController.m
#import "testDelegateViewController.h" @implementation testDelegateViewController @synthesize delegate, button; - (void)pass { NSLog(@"按钮被按下"); [self.delegate passSomeToDelegate:@"一些内容"]; } // 在加载视图后执行其他的设置 - (void)viewDidLoad { [super viewDidLoad]; [button addTarget:self action:@selector(pass) forControlEvents:UIControlEventTouchUpInside]; } // 其他代码
AppDelegate.h
#import "testDelegateViewController.h" @interface AppDelegate : NSObject{ }
AppDelegate.m
#import "AppDelegate.h" @implementation AppDelegate @synthesize window=_window; @synthesize viewController=_viewController; #pragma mark Delegate Method - (void)passSomeToDelegate:(NSString *)some { NSLog(@"%@", some); } // 其他代码
但是当按钮被点击时,我的控制台上没有任何输出。
谢谢。
问题原因:忘记设置代理(delegate)。
解决方法:在application:didFinishLaunchingWithOptions:
方法中设置代理(delegate)。
代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.viewController.delegate = self; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
我添加了self.viewController.delegate = self;
来设置代理(delegate)。
对于像我这样的初学者来说,这非常有帮助。