Реализация методов делегата для передачи данных контроллера модального представления - PullRequest
4 голосов
/ 16 июля 2010

У меня есть простой проект, чтобы представить контроллер модального вида и передать обратно строку, основанную на том, какая кнопка в модальном 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"];
    }

}

1 Ответ

4 голосов
/ 16 июля 2010

Избавьтесь от этих * с после id <something> и до delegate.

Так сделайте это

id <MyModalViewControllerDelegate> *delegate;

это

id <MyModalViewControllerDelegate> delegate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...