La mise en œuvre de délégué méthodes modale-vue-contrôleur de transfert de données
J'ai un projet simple de présenter un modal-vue-contrôleur et de transférer une chaîne basée sur le bouton modale des VC qui se pressé. Je me suis basé sur regarder le cours à Stanford sur iTunes U. Il semble que j'ai tout corriger, mais je reçois un couple des avertissements du compilateur.
J'obtiens d'abord appelé passing argument 1 of 'setDelegate:' from incompatible pointer type
dans TransferViewController.m
Deuxième-je obtenir quatre avertissements appelé Invalid receiver type 'id <MyModalViewControllerDelegate>*'
mais ce ne sont pas affichées dans les résultats de la compilation de la zone, plutôt à côté de la délinquance des lignes dans MyModalViewController.m
, les deux lignes dans chacune des actions de bouton.
Voici le code...
// 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"];
}
}
OriginalL'auteur Steve | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
De se débarrasser de ces
*
s aprèsid <something>
et avantdelegate
.Ainsi faire de ce
ce
Concernant le type non valide question, je pense que c'est un de ces cas où l'Objective-C étant tellement permissive peu de moi. Il était heureux de me laisser incorrecte de définir le délégué comme un pointeur, mais seulement énervé quand j'ai essayé de l'utiliser de cette façon - un indice sur la façon dont je définis ce serait bien dans l'avertissement du compilateur. Peut-être dans xCode 4!
Ouais, on dirait que vous l'obtenir 🙂 Un délégué encore des points à un objet, donc si vous dirais SomeDelegateClass *délégué, vous auriez encore besoin de l' *, le truc, c'est que l'id a déjà cette * 'à l'intérieur', de sorte que vous n'avez pas besoin d'écrire explicitement.
J'ai juste eu la chance d'essayer le fix, et il se débarrasse de la 4 avertissements appelé
Invalid receiver type 'id <MyModalViewControllerDelegate>*'
mais j'ai toujours unPassing argument 1 of 'setDelegate:' from incompatible pointer type
avertissement. Il se produit sur la ligneTransferViewController.m
où je fais ceci:myModalViewController.delegate = self;
je l'ai noté ci-dessus et supprimé le 1*`.A également reçu le
*
dans le@protocol
définition. Cet réussi à le compiler, mais maintenant, quand il s'exécute, le modal ne s'affiche pas, il transforme tout blanc. Bizarre. Plus tripoter...OriginalL'auteur Douwe Maan