2010-09-28 5 views
0

je dois présenter un contrôleur de vue modal et être informé lorsqu'il est rejeté ou avisé que je dois rejeter, en regardant ici, je suis encore confus:délégué ModalViewController confusion

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

J'ai mon mainViewController et contrôleur de myModalView et j'ai le code suivant qui doit être mis en œuvre, mais ne savez pas où - première place délégué protocal:

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

qui Controller.h ce que cela va dans? Je suppose mon modalViewController.h

Deuxièmement, ma mise en œuvre:

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

qui Controller.m ce que cela va dans? Je suppose mon mainViewController.m

J'ai également les propriétés des délégués qui doit être Aded:

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

qui Controller.m ne ce besoin d'aller? Je suppose mon modalViewController.h

et voici comment je présente le modalViewController de mon MainViewController:

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

En ce moment cela me donne l'erreur suivante:

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

Qu'est-ce que suis-je manquant ici?

EDIT - VOICI MON MODAL VOIR CONTRÔLEUR .H

#import <UIKit/UIKit.h> 

@protocol DataSyncDelegate 
-(void) doneWithSync; 
@end 

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

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

@end 

EDIT - MAIN VIEW CONTROLLER .H ET .M

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

@interface LoginViewController : UIViewController <DataSyncDelegate>{ 

} 

@end 

VOICI LA CREATION DE LA MODAL:

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

VOICI MA MISE EN ŒUVRE DU DÉLÉGUÉ:

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

Et maintenant tout semble câbler correctement dans le compilateur mais je reçois l'erreur suivante:

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

de poster aussi votre contrôleur mainView :) – willcodejavaforfood

+0

Ne devrait-il pas être @interface LoginViewController: UIViewController au lieu de DataSyncComplete? – willcodejavaforfood

+0

désolé, je passais les noms autour d'essayer différentes choses - ils correspondent correctement – Slee

Répondre

3

Votre contrôleur principal de vue est le délégué et doit mettre en œuvre le protocole. Votre modalView a un délégué qu'il appelle quand il est rejeté.

+0

Je comprends le concept mais j'ai du code au mauvais endroit, c'est pourquoi j'ai essayé d'être si détaillé ci-dessus - qu'est-ce que j'ai au mauvais endroit ici? – Slee

+0

avez-vous déclaré la propriété @delegate dans DataSyncViewController? – willcodejavaforfood

+0

Oui, j'ai ceci dans mon dataSyncController: id delegate; @property (nonatomic, retain) id délégué; – Slee