ModalViewController делегат путаницы - PullRequest
       1

ModalViewController делегат путаницы

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

Мне нужно представить контроллер модального вида и получить уведомление, когда он уволен или уведомлен о том, что мне нужно его закрыть, глядя здесь. Я все еще в замешательстве:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html#//apple_ref/doc/uid/TP40007457-CH111-SW14

Iу меня есть mainViewController и контроллер myModalView, и у меня есть следующий код, который должен быть реализован, но я не уверен, где - сначала протокольный делегат:

@protocol DataSyncDelegate <NSObject>
-(void) doneWithSync;
@end

, в какой controller.h это входит?Я предполагаю, что мой modalViewController.h

секунда - моя реализация:

-(void) doneWithSync {
    [self dismissModalViewControllerAnimated:YES];
}

, в какой controller.m это входит?Я предполагаю, что мой mainViewController.m

У меня также есть свойства делегата, которые необходимо изменить:

id delegate;
@property (nonatomic, retain) id delegate;

, в какой controller.m это нужно добавить?Я предполагаю, что мой modalViewController.h

и вот как я представляю modalViewController из моего MainViewController:

DataSyncViewController *dataSyncViewController = [[DataSyncViewController alloc] initWithOptions:FALSE];
dataSyncViewController.delegate = self;
[self presentModalViewController:dataSyncViewController animated:NO];
[dataSyncViewController release];

На данный момент это дает мне следующую ошибку:

-[DataSyncViewController setDelegate:]: unrecognized selector sent to instance 0x5952e20

Что мне здесь не хватает?

РЕДАКТИРОВАТЬ - ЗДЕСЬ МОЙ МОДАЛЬНЫЙ КОНТРОЛЛЕР ВИДА .H

#import <UIKit/UIKit.h>

@protocol DataSyncDelegate
-(void) doneWithSync;
@end

@interface DataSyncViewController : UIViewController {
    id <DataSyncDelegate>   delegate;
}

@property (nonatomic, retain) id <DataSyncDelegate> delegate;

@end

РЕДАКТИРОВАТЬ - ГЛАВНЫЙ КОНТРОЛЛЕР ВИДА .H AND .M

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "DataSyncViewController.h"

@interface LoginViewController : UIViewController <DataSyncDelegate>{

}

@end

ЗДЕСЬ СОЗДАНИЕ МОДАЛА:

DataSyncViewController *dataSyncViewController = [[DataSyncViewController alloc] initWithOptions:FALSE];
dataSyncViewController.delegate = self;
[self presentModalViewController:dataSyncViewController animated:NO];
[dataSyncViewController release];

ЗДЕСЬ МОЕ РЕАЛИЗАЦИЯ ДЕЛЕГАТА:

-(void) doneWithSync {
    [self dismissModalViewControllerAnimated:YES];
}

И теперь все выглядит правильно, чтобы подключиться в компиляторено я получаю следующую ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[DataSyncViewController setDelegate:]: unrecognized selector sent to instance 0x59e4b40'

1 Ответ

3 голосов
/ 28 сентября 2010

Ваш контроллер основного вида является делегатом и должен реализовывать протокол. Ваш modalView имеет делегата, который он вызывает, когда его увольняют.

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