Протокол не вызывает методы - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть модальное представление, в котором пользователь выбирает некоторые данные для добавления в таблицу. Когда пользователь нажимает кнопку сохранения, модальное представление должно исчезнуть и отправить необходимые данные обратно в контроллер представления, который представил модальное представление для дальнейшей обработки. Чтобы добиться этого, я настроил протокол. Метод протокола в исходном контроллере представления не вызывается. Мой код ниже, что я делаю не так?

Файл заголовка (контроллер модального вида):

@protocol AddTAFDataSource;

@interface AddTAFViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> {
    id<AddTAFDataSource> dataSource;
    NSString *newICAOCode;
}

@property (nonatomic, assign) id<AddTAFDataSource> dataSource;

- (IBAction)saveButtonPressed;

@end

@protocol AddTAFDataSource <NSObject>
- (void)addNewTAF:(AddTAFViewController *)addTAFViewController icao:(NSString *)icaoCode;
@end

Файл реализации (контроллер модального вида):

#import "AddTAFViewController.h"
#import "TAFandMETARViewController.h"

@implementation AddTAFViewController

@synthesize dataSource;
...
- (IBAction)saveButtonPressed {
    [self.dataSource addNewTAF: self icao: newICAOCode]; 
}

@end

Представление заголовочного файла контроллера представления:

#import "AddTAFViewController.h"

@interface TAFandMETARViewController : UITableViewController <AddTAFDataSource> {

}

@end

И, наконец, контроллер представления:

#import "AddTAFViewController.h"  
        ...  
- (void)insertNewObject:(id)sender {
        AddTAFViewController *addTAFViewController = [[AddTAFViewController alloc] initWithNibName: @"AddTAF" bundle: [NSBundle mainBundle]];
        addTAFViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [(AddTAFViewController *)self.view setDataSource: self];
        [self presentModalViewController: addTAFViewController animated: YES];
        addTAFViewController = nil;
        [addTAFViewController release];
}

- (void)addNewTAF:(AddTAFViewController *)addTAFViewController icao:(NSString *)icaoCode {
        newICAO = icaoCode;
        [self dismissModalViewControllerAnimated: YES];
}

Напомню, что выше - (void) addNewTAF: метод, который не передается по сообщениям. Любая помощь / указатели в правильном направлении очень ценятся.

Ответы [ 3 ]

2 голосов
/ 16 сентября 2010

Заменить:

[(AddTAFViewController *)self.view setDataSource: self];

С:

[addTAFViewController setDataSource:self]

В конце концов, dataSource является свойством контроллера, а не представлением контроллера.

0 голосов
/ 16 сентября 2010

Вместо того, чтобы пытаться использовать отдельный объект (ваш источник данных) для передачи данных между двумя контроллерами представления, вы можете просто использовать свойства add, чтобы содержать данные непосредственно в контроллере представления, который вы собираетесь представить модально (здесьAddTAFViewController).

Затем в методе, который вы используете для отмены контроллера модального вида, перед его отклонением вы можете отправить [self modalViewController], чтобы получить контроллер модального представления, и в этот момент родительский контроллер представления может отправитьэто любые сообщения, которые он хочет.Это позволит вам получать любые данные, которые вам нужны, от контроллера модального представления, поэтому вам вообще не понадобится источник данных и протокол.

0 голосов
/ 16 сентября 2010

Вы ошибаетесь в этом пункте:

[(AddTAFViewController *)self.view setDataSource: self];

вы должны написать это вместо:

addTAFViewController.dataSource = self;
...