2010-02-12 6 views
0

J'ai un projet dans lequel le SwitchViewController est le contrôleur racine Il charge le viewcontroller2 dans un certain état, viewcontroller2 charge modalviewcontroller1 dans certains états. Il y a une fonction 'okButtonPressed' dans modelviewcontroller1 (1 point d'arrêt), je l'espère, il peut notifier viewcontroller2 et appeler la fonction 'dosomething' (// Point d'arrêt 2)protocole et multi viewcontroller

Donc, je mis un protocole, tous viewcontroller (switchviewcontroller , viewcontroller2, modalviewcontroller1) contient le protocole

J'ai défini breakpoint1 et breakpoint2 comme ci-dessous.

Aucune erreur n'a été signalée, mais aucun arrêt au point d'arrêt 2, 'dosomething' n'a été exécuté.

Bienvenue tout commentaire

Merci InterDev

//----------------------------------------------source codes 

//myprotocol.h 
#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 


@class Myprotocol; 

@protocol MyprotocolDelegate <NSObject> 
@optional 

- (void)function1 ; 

@end 
//----------------------------------- 

@interface Myprotocol : NSObject { 

    id <MyprotocolDelegate> delegate; 
} 

@property (nonatomic, assign) id <MyprotocolDelegate> delegate; 

@end 
//myprotocol.m 


#import "myprotocol.h" 
@implementation Myprotocol 
@synthesize delegate; 

- (void)dealloc {  
    [super dealloc]; 
} 
@end 

//"ModalViewController1.h" 
#import <UIKit/UIKit.h> 

#import "myprotocol.h" 

@interface ModalViewController1 : UIViewController <MyprotocolDelegate> { 
id<MyprotocolDelegate> delegate; 
} 
@property (nonatomic, assign) id<MyprotocolDelegate> delegate; 

- (IBAction)okButtonPressed:(id)sender; 
@end 

//"ModalViewController1.m" 


#import "ModalViewController1.h" 

@implementation ModalViewController1 
@synthesize delegate; 

- (IBAction)okButtonPressed:(id)sender; 
{  
    [delegate function1];//breakpoint 1 
    [self.view removeFromSuperview];  
} 

//------ViewController2.h" 
#import <UIKit/UIKit.h> 

#import "myprotocol.h" 


@class ModalViewController1 ; 
@interface ViewController2 : UIViewController <MyprotocolDelegate>{ 
    ModalViewController1 *vModalViewController1; 
    id<MyprotocolDelegate> delegate; 

} 
@property (nonatomic, assign) id<MyprotocolDelegate> delegate; 
@property (retain,nonatomic) ModalViewController1 *vModalViewController1; 
@end 

//----ViewController2.m"-------------- 
#import "ViewController2.h" 
#import "ModalViewController1.h" 

@synthesize delegate; 

- (void)function1; 
{ 
    [self dosomething];//breakpoint 2 
} 

//SwitchViewController.h 

#import <UIKit/UIKit.h> 

#import "myprotocol.h" 


@class ViewController2; 

@class ModalViewController1 ; 


@interface SwitchViewController : UIViewController <MyprotocolDelegate> { 

    ViewController2 *vViewController2; 

}  

@property (retain,nonatomic) ViewController2 *vViewController2; 

@end 

//in SwitchViewController.m 

ViewController2 *vvViewController2=[[ViewController2 alloc] 
     initWithNibName:@"View2" bundle:nil]; 
self.vViewController2=vvViewController2; 

[vvViewController2 release]; 
[self.vViewController2 setDelegate:self]; 
+0

formatez s'il vous plaît le code en utilisant correctement quatre espaces avant chaque ligne. – FelixLam

Répondre

0

Pour que cela fonctionne vous devez définir votre instance de ViewController2 en tant que délégué pour ModalViewController1

+0

réponse parfaite! Je souhaite savoir si les codes [vvViewController2]; [self.vViewController2 setDelegate: self]; sont inutiles – arachide

+0

Vous avez besoin de la version [vvViewController2] depuis que vous l'avez allouée. Je ne pense pas que vous ayez besoin d'un délégué dans ViewController2, mais seulement dans ModalViewController1 – willcodejavaforfood

Questions connexes