我一直在关注这个例子来帮助我建立一个委托,但不幸的是我错过了一些东西,所以它不适合我。 How do I set up a simple delegate to communicate between two view controllers?委托模式ios
我的代码如下所示:
// HintsViewController.h
#import <UIKit/UIKit.h>
@protocol HintDelegateProtocol;
@interface HintsViewController : UIViewController
@property (weak, nonatomic) id<HintDelegateProtocol> hintDelegate;
-(IBAction)showFirstLetter:(id)sender
-(IBAction)showHint:(id)sender;
-(IBAction)showAnswer:(id)sender;
@end
@protocol HintDelegateProtocol <NSObject>
-(void)HintsViewController:(HintsViewController*)hintsViewController
showFirstLetter:(NSString*)firstLetter;
-(void)HintsViewController:(HintsViewController*)hintsViewController
showHint:(NSString*)hint;
-(void)HintsViewController:(HintsViewController*)hintsViewController
showAnswer:(NSString*)answer;
@end
//
// HintsViewController.m
#import "HintsViewController.h"
@implementation HintsViewController
#pragma mark -
#pragma mark IBActions
/*为每一个建议下面我在这里/ *
- (IBAction)showHint:(id)sender
{
[self.hintDelegate HintsViewController:self showHint:@"Hint"];
}
- (IBAction)showFirstLetter:(id)sender
{
[self.hintDelegate HintsViewController:self showFirstLetter:@"FirstLetter"];
}
- (IBAction)showAnswer:(id)sender
{
[self.hintDelegate HintsViewController:self showAnswer:@"Answer"];
}
@end
然后改变了代码的控制器类,我有以下:
//
// GameLogicController.h
#import "HintsViewController.h"
@interface GameLogicController : NSObject < HintDelegateProtocol>
@end
而在实施中,我有以下内容:
// GameLogicController.m
-(void) nextRiddle
{
HintsViewController *hintsViewController = [[HintsViewController alloc] init];
hintsViewController.hintDelegate = self;
}
#pragma mark -
#pragma mark HintsFunctionality
-(void)HintsViewController:(HintsViewController*)hintsViewController
showFirstLetter:(NSString*)firstLetter
{
NSLog(@"Show First Letter called");
}
-(void)HintsViewController:(HintsViewController*)hintsViewController
showHint:(NSString*)hint
{
NSLog(@"show Hint called");
}
-(void)HintsViewController:(HintsViewController*)hintsViewController
showAnswer:(NSString*)answer
{
NSLog(@"Show answer called");
}
使用断点,我可以看到,在HintsViewController的IBActions被调用,但把一个断点任何在gameLogicController委托方法从来没有击中。所以我错过了在GameLogicController和HintsViewController之间建立连接的重要一步。任何人都可以帮我发现它吗?
试图更改属性(弱,非原子)财产(强,非原子) – Andrey
都能跟得上。不起作用 –
更改[strongDelegate HintsViewController:self showFirstLetter:@“firstLetter”]; [self.hintDelegate HintsViewController:self showFirstLetter:@“firstLetter”](其实你不需要在它之前的行) – Andrey