2 votes

Erreur inattendue "@" dans le programme

D'accord, en gros, j'essaie de lier une étiquette à un bloc de code dans XCode 4.6.2. Je l'ai lié en utilisant le concepteur mais peu importe où je le mets, cela me donne ce message d'erreur. Je suis nouveau sur Xcode et j'ai l'impression que cela devrait être simple à corriger. Merci pour les retours.

(void)updateLabel {
    @property (weak, nonatomic) IBOutlet UILabel *Timer;

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    int units = NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *components = [calendar components:units fromDate:[NSDate date] toDate:destinationDate options:0];
        [dateLabel setText:[NSString stringWithFormat:@"%d%c %d%c %d%c %d%c %d%c", [components month], 'M', [components day], 'D', [components hour], 'H', [components minute], 'M', [components second], 'S']];

    [super viewDidLoad];
    // Faire toute configuration supplémentaire après le chargement de la vue, généralement à partir d'un fichier nib.

        destinationDate = [[NSDate dateWithTimeIntervalSince1970:1383652800] retain];
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES];

}

6voto

rmaddy Points 79279

Le problème est qu'une @property ne peut apparaître que à l'intérieur d'une @interface. Cela peut être dans un fichier .h ou dans une extension de classe dans le fichier .m. Mais cela ne peut certainement pas être mis à l'intérieur d'une implémentation de méthode.

Étant donné que votre propriété est également un IBOutlet, elle doit être dans le fichier .h.

Note latérale :

La façon dont vous créez le texte de l'étiquette est étrange. Au minimum, faites ceci :

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
int units = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *components = [calendar components:units fromDate:[NSDate date] toDate:destinationDate options:0];
dateLabel.text = [NSString stringWithFormat:@"%dM %dD %dH %dM %dS", [components month], [components day], [components hour], [components minute], [components second]];

Mieux encore, utilisez un NSDateFormatter :

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"M'M' d'D' H'H' m'M' s'S'"];
dateLabel.text = [formatter stringFromDate:[NSDate date]];

0voto

Ahmad Gaffoor Points 23

La déclaration @property ne doit pas figurer dans votre fonction. Vous devriez toujours placer les déclarations "@" AVANT la fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X