У меня есть простой проект, чтобы представить контроллер модального вида и передать обратно строку, основанную на том, какая кнопка в модальном VC нажата.Я основал все это на просмотре класса Стэнфорда в iTunes U. Похоже, у меня все правильно, но я получаю пару предупреждений компилятора.
Сначала я получаю один с именем passing argument 1 of 'setDelegate:' from incompatible pointer type
в TransferViewController.m
Во-вторых, я получаю четыре предупреждения с именем Invalid receiver type 'id <MyModalViewControllerDelegate>*'
, но они не отображаются в области результатов сборки, а рядом с ошибочными строками в MyModalViewController.m
, обе строки в каждом из действий кнопки.
Вот код ...
// TransferViewController.h
#import <UIKit/UIKit.h>
#import "MyModalViewController.h";
@interface TransferViewController : UIViewController <MyModalViewControllerDelegate> {
UILabel *label;
UIButton *button;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
@property (nonatomic, retain) UIButton *button;
- (IBAction)updateText;
@end
// TransferViewController.m
#import "TransferViewController.h"
@implementation TransferViewController
@synthesize label;
@synthesize button;
- (IBAction)updateText {
MyModalViewController *myModalViewController = [[MyModalViewController alloc] init];
myModalViewController.delegate = self; // I get the warning here.
[self presentModalViewController:myModalViewController animated:YES];
[myModalViewController release];
}
- (void)myModalViewController:(MyModalViewController *)controller didFinishSelecting:(NSString *)selectedDog {
label.text = selectedDog;
[self dismissModalViewControllerAnimated:YES];
}
@end
// MyModalViewController.h
#import <UIKit/UIKit.h>
@protocol MyModalViewControllerDelegate;
@interface MyModalViewController : UIViewController {
UIButton *abby;
UIButton *zion;
id <MyModalViewControllerDelegate> delegate;
}
@property (assign) id <MyModalViewControllerDelegate> delegate;
- (IBAction)selectedAbby;
- (IBAction)selectedZion;
@end
@protocol MyModalViewControllerDelegate <NSObject>
@optional
- (void)myModalViewController:(MyModalViewController *)controller didFinishSelecting:(NSString *)selectedDog;
@end
// MyModalViewController.m
#import "MyModalViewController.h"
@implementation MyModalViewController
@synthesize delegate;
- (IBAction)selectedAbby {
if ([self.delegate respondsToSelector:@selector (myModalViewController:didFinishSelecting:)]) {
[self.delegate myModalViewController:self didFinishSelecting:@"Abby"];
}
}
- (IBAction)selectedZion {
if ([self.delegate respondsToSelector:@selector (myModalViewController:didFinishSelecting:)]) {
[self.delegate myModalViewController:self didFinishSelecting:@"Zion"];
}
}