2 votes

Symboles indéfinis pour l'architecture x86_64 dans Xcode 4.4

J'ai récemment lancé un nouveau projet dans Xcode 4.4 sous Mountain Lion. J'ai une classe appelée TSTopChartManager qui se trouve dans la nib MainMenu de mon projet. J'ai également un conteneur de données appelé PodcastShow qui possède essentiellement un ensemble de propriétés et une méthode permettant de récupérer une image sur Internet. C'est ce que TSTopChartManger on dirait que...

Le fichier .h...

#import <Foundation/Foundation.h>
#import "PodcastShow.h"

@interface TSTopChartManager : NSObject

@property NSMutableArray *topPodcasts;
@end

Le fichier .m :

#import "TSTopChartManager.h"

@implementation TSTopChartManager
-(id) init
{
    if (self)
    {
        /*PodcastShow *myShow = [[PodcastShow alloc] init];
        myShow.title = @"This is a show";*/
    }
    return self;
}
@end

En ce moment, il fonctionne parfaitement. Mais lorsque je supprime le commentaire du bloc dans la méthode init comme ceci...

if (self)
    {
        PodcastShow *myShow = [[PodcastShow alloc] init];
        myShow.title = @"This is a show";
    }

Je reçois les erreurs suivantes..

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_PodcastShow", referenced from:
      objc-class-ref in TSTopChartManager.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Je ne sais pas pourquoi cela se produit. Je n'ai jamais vu d'erreurs de ce genre auparavant. Comment dois-je m'y prendre pour le corriger ? Avez-vous des idées ? Je vous remercie.

Pour les curieux : PodcastShow est traité comme un conteneur de données dans mon application. Il possède quelques propriétés et deux méthodes. Voici ce que PodcastShow ressemble :

.h :

#import <Foundation/Foundation.h>

@interface PodcastShow : NSObject
{
    NSString *title;
    NSString *network;
    NSString *imageURL;
    NSImage *image;
    NSString *link;
    NSString *description;
}
-(void) fetch;
@property (strong, readwrite) NSString *title;
@property (strong, readwrite) NSString *network;
@property (strong, readwrite) NSString* imageURL;
@property (strong) NSImage *image;
@property (strong, readwrite) NSString *identification;
@property (strong, readwrite) NSString *link;
@property (strong, readwrite) NSString *description;
@end

m :

#import "PodcastShow.h"

@implementation PodcastShow
-(id) init
{
    if (self)
    {
        NSLog(@"initilized");
    }
    return self;
}

-(void) fetch
{
    [NSThread detachNewThreadSelector:@selector(getImageFromInternet) toTarget:self withObject:nil];
}

-(void) getImageFromInternet
{
    self.image = [[NSImage alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageURL]];
}
@end

11voto

mattjgalloway Points 24217

Probablement PodcastShow.m ne fait pas partie de la phase de construction. Cliquez dessus dans le navigateur du projet et regardez à droite de l'écran dans les informations sur le fichier. Assurez-vous que la cible de votre application est cochée.

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