L'accès à une variable privée depuis la catégorie génère une erreur de l'éditeur de liens

StackOverflow https://stackoverflow.com/questions/1615947

Question

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

  "_OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.x", referenced from: _OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.x$non_lazy_ptr in UIAcceleration+IRowAdditions.o "_OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.y", referenced from: _OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.y$non_lazy_ptr in UIAcceleration+IRowAdditions.o "_OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.z", referenced from: _OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.z$non_lazy_ptr in UIAcceleration+IRowAdditions.o "_OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.timestamp", referenced from: _OBJC_IVAR_

J'ai le code suivant:

@interface UIAcceleration (Simulation)

- (id) initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az;

@end

@implementation UIAcceleration (Simulation)

-(id)initWithTimestamp:(NSTimeInterval)aTimeStamp
                     X:(UIAccelerationValue)ax
                     Y:(UIAccelerationValue)ay
                     Z:(UIAccelerationValue)az 
{
    if (self = [super init])
    {
        timestamp = aTimeStamp;
        x = ax;
        y = ay;
        z = az;
    }

    return self;
}       

@end

lors de la compilation pour le simulateur SDK, tout fonctionne correctement. Lors de la compilation pour le kit de développement logiciel (SDK), l'erreur de l'éditeur de liens suivante est générée:

<*>

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

UIAcceleration.timestamp$non_lazy_ptr in AccelerometerSimulation.o ld: symbol(s) not found collect2: ld returned 1 exit status

Qu'est-ce que je fais mal? Quelle est la différence entre la liaison avec les frameworks Simulator (à savoir UIKit) et la liaison avec les frameworks de périphérique?

Était-ce utile?

La solution 3

Ok, aucune des réponses données n’ayant aidé, j’ai fait quelque chose de différent.

J'ai créé une classe avec exactement la même interface que UIAcceleration. Comme ils ont tous les deux la même disposition de la mémoire, je peux effectuer une conversion en toute sécurité entre les pointeurs de UIAcceleration et ceux de ma classe. Au moins aussi longtemps que gcc le souhaite.

Autres conseils

Je pense que vous n’avez probablement inclus que la version simulateur du framework UIKit. Je n'en suis pas si sûr, mais accédez au volet gauche de Xcode et sous le dossier Frameworks , cliquez avec le bouton droit de la souris sur UIKit.framework et sur Obtenir des informations <. / fort>. Sur le mien, le chemin est /System/Library/Frameworks/UIKit.framework et juste en dessous, il est écrit Type de chemin: "relatif au SDK actuel". Cela devrait automatiquement tirer le bon cadre en fonction de ce que vous construisez.

Vaut le détour.

Ceci peut être lié à ce problème avec des catégories sur l'iPhone. Essayez d'ajouter -ObjC (iPhone OS 2.x) et -all_load (iPhone OS 3.0) à vos "Autres drapeaux de l'éditeur de liens".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top