简单的委托方法无效。

13 浏览
0 Comments

简单的委托方法无效。

希望能得到一些帮助。

我有一个简单的测试项目:

http://dl.dropbox.com/u/10101053/testDelegate.zip

我想在一个委托方法中传递一个NSString,但是这段代码不起作用。

testDelegateViewController.h

@protocol testDelegateViewControllerDelegate; 
@interface testDelegateViewController : UIViewController {
id delegate;
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);
}
// 其他代码

但是当按钮被点击时,我的控制台上没有任何输出。

谢谢。

0
0 Comments

问题原因:忘记设置代理(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)。

对于像我这样的初学者来说,这非常有帮助。

0