iphone - pwa - error: especificador-calificador-lista esperado antes... en el objetivo C?
web app ipad (9)
Cada vez que construyo el siguiente código, obtengo el error anterior.
//Controller.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "PolygonShape.h"
#import "PolygonView.h";
@interface Controller : NSObject
{
IBOutlet UIButton *decreaseButton;
IBOutlet UIButton *increaseButton;
IBOutlet UILabel *numberOfSidesLabel;
IBOutlet PolygonShape *shape;
IBOutlet PolygonView *shapeView;
}
- (IBAction)decrease;
- (IBAction)increase;
- (void)awakeFromNib;
@end
//Controller.m
#import "Controller.h"
@implementation Controller
@end
Sin embargo, cuando reemplazo la declaración de importación y pongo una referencia de clase forward en su lugar, el código se compila.
//Controller.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "PolygonShape.h"
@class PolygonView;
@interface Controller : NSObject
{
IBOutlet UIButton *decreaseButton;
IBOutlet UIButton *increaseButton;
IBOutlet UILabel *numberOfSidesLabel;
IBOutlet PolygonShape *shape;
IBOutlet PolygonView *shapeView;
}
- (IBAction)decrease;
- (IBAction)increase;
- (void)awakeFromNib;
@end
//Controller.m
#import "Controller.h"
#import "PolygonView.h"
@implementation Controller
@end
¿Alguien puede explicar?
Acabo de tener este problema en un proyecto de Objective-C ++; en ese caso, es uno de los errores que pueden surgir si olvida nombrar su archivo de implementación .mm en lugar de .m.
Esto sucede porque olvidó incluir uno de los archivos de encabezado. También recibía el mismo tipo de error, pero después de la inclusión correcta del archivo de encabezado, el error desapareció.
Me encontré con este error al tratar de hacer referencia a un protocolo que había configurado yo mismo.
Esto muestra mi protocolo, el método incorrecto y lo que creo que es el método correcto.
in .h
// ------------------------------------ EtEmailDelegate Protocol -BEGIN- --------------------------------------
@protocol EtEmailDelegate
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error; //<-- This is really just one chunk from the MFMailComposeViewControllerDelegate
@end
// ------------------------------------ EtEmailDelegate Protocol -END- --------------------------------------
@interface ClsEtEmail : NSObject < MFMailComposeViewControllerDelegate> {
// owner
UIViewController *myUivc;
//EtEmailDelegate *myDelegate; // <--- the wrong way, throw error
id<EtEmailDelegate> *myDelegate; // <-- the right way (i think)
...
}
@property (nonatomic, readwrite, assign) id<EtEmailDelegate> delegate;
@end
Solo para completar, así es como estoy implementando algunos métodos que también dependen del protocolo ...
in .m
@synthesize delegate = myDelegate;
// my static initializer
+(id) objEtEmailWithUivc: (UIViewController*) theUivc delegate: (id <EtEmailDelegate>) theDelegate {
ClsEtEmail * obj = [[[ClsEtEmail alloc] initWithlUivc: theUivc delegate:theDelegate] autorelease];
return obj;
}
// my normal init
- (id)initWithlUivc: (UIViewController*) theUivc delegate: (id <EtEmailDelegate>) theDelegate {
self = [super init];
if (self) {
[self init_]; // my private init (not seen)
self.uivc = theUivc;
NSAssert([theDelegate conformsToProtocol:@protocol(EtEmailDelegate)],@"whoh - this can''t is notE tEmailDelegate");
self.delegate = theDelegate;
}
return self;
}
Espero que esto ayude a alguien más.
Recibí este error con un simple error ... ¿quizás otros están haciendo lo mismo?
CORRECTO:
@interface ButtonDevice : NSObject
{
NSString *name;
NSString *uri;
NSString *icon;
}
@property (nonatomic, retain) IBOutlet NSString *name;
@property (nonatomic, retain) IBOutlet NSString *uri;
@property (nonatomic, retain) IBOutlet NSString *icon;
@end
INCORRECTO:
@interface ButtonDevice : NSObject
{
NSString *name;
NSString *uri;
NSString *icon;
@property (nonatomic, retain) IBOutlet NSString *name;
@property (nonatomic, retain) IBOutlet NSString *uri;
@property (nonatomic, retain) IBOutlet NSString *icon;
}
@end
Sí, yo también tenía este problema de Dependencias Cíclicas donde estaba importando ambas clases el uno al otro. Tampoco sabía qué eran las Declaraciones a futuro. Inmediatamente lo busqué en Wikipedia pero estaba mal descrito. Encontré esta publicación que explica qué son y cómo se relacionan con las importaciones cíclicas. http://timburrell.net/blog/2008-11-23/effective-c-cyclical-dependencies/
Nota: El enlace sigue bajando, así que solo lo copié en PDF .
Si eliminó el encabezado de prefijo precompilado, debe importar manualmente los archivos de encabezado necesarios en el archivo:
me gusta
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
Simplemente siga esta regla para evitar tales problemas:
Si un objeto solo se usa internamente en el archivo de implementación de la clase, use la declaración de reenvío en el archivo de encabezado e importe / incluya en el archivo de implementación. De lo contrario, use importar en el encabezado.
Solo tiene que incluir una clase que parece ser pasada por alto:
#import "NameOfClass.h"
y fue ordenado Gracias.
También puede verificar errores de ortografía tontos. Por ejemplo, tuve una clase llamada ''MyUIViewController'' pero escribí:
@property (nonatomic, retain) MyViewController *myViewController;
Y obtuve este error. Después de que lo corregí a:
@property (nonatomic, retain) MyUIViewController *myViewController;
El error fue corregido, las computadoras son tan literales.