En toda mi aplicación, recibo advertencias de problemas semánticos cuando configuro ViewController.delegate = self
. He buscado y encontrado publicaciones similares, pero ninguna pudo resolver mi problema.
ViewController.m:
GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0];
gameAddViewContoller.delegate=self;
Recibo el mensaje de error al configurar .delegate=self
.
GameAddViewController.h:
@protocol GameAddViewControllerDelegate <NSObject>
- (void)gameAddViewControllerDidCancel:(GameAddViewController *)controller;
- (void)gameAddViewController:(GameAddViewController *)controller didAddGame:(Game *) game;
@end
@interface GameAddViewController : UITableViewController <GameAddViewControllerDelegate>
{
sqlite3 *pitchcountDB;
NSString *dbPath;
}
@property (nonatomic, strong) id <GameAddViewControllerDelegate> delegate;
...
@end
ViewController.h:
#import "GameAddViewController.h"
@class ViewController;
@protocol ViewControllerDelegate <NSObject>
- (void)ViewControllerDidCancel:(ViewController *)controller;
@end
@interface ViewController : UIViewController <ViewControllerDelegate>
-(void) checkAndCreateFile;
@end
¿Alguien puede indicarme la dirección correcta para resolver los mensajes de advertencia?
ios
objective-c
delegates
David L
fuente
fuente
ViewController
alGameAddViewControllerDelegate
delegado.Para mí, lo que terminó sucediendo es que no estaba agregando el delegado a la @interface en mi archivo de encabezado
Por ejemplo
@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> @end
fuente
Está poniendo <GameAddViewControllerDelegate> en el lugar equivocado. No va a GameAddViewController, va a ViewController.
fuente
Esto podría ayudar a otras personas que están agregando conectividad multipeer directamente a un ViewController. En la parte superior de myViewControllerName.h agregue '<MCSessionDelegate>':
@interface myViewControllerName : UIViewController<MCSessionDelegate>
fuente
también, si define su delegado en xx.m, pero lo usa en otra clase. puede tener este problema. por lo tanto, simplemente coloque la definición de protocolo en xx.h, cuando sea necesario.
fuente
Si tiene un proyecto híbrido, el protocolo en Swift y la asignación en Objective-C:
Declaración rápida:
Asignación de Objective-C:
@property (nonatomic) id<BackgroundTasking> backgroundTasker; _backgroundTasker = [[BackgroundTasker alloc] init]; // WARNING
Asignar a '__ strong id' del tipo incompatible 'BackgroundTasker *'
Debe declarar la clase (para eliminar esta advertencia) y las funciones (para hacerlas accesibles) como @objc para que estén correctamente puenteadas.
Declaración correcta de Swift:
fuente
En proyectos híbridos, debe agregar sus delegados en el archivo .h en lugar del archivo .m
fuente