2010-07-13 5 views
0

Espérant vraiment que quelqu'un puisse m'aider à comprendre pourquoi envoyer des objets membres d'un tableau semble être la chose la plus difficile au monde dans Obj-C.Envoi d'un message à un objet membre du tableau

Voici la configuration: J'ai une classe de voiture. La voiture a deux objets membres, le moteur et le pneu (il y en a quatre). Ensuite, j'ai un NSArray (également un membre de la voiture) initialisé pour tenir les objets du pneu. Je l'ai fait parce que je ne peux pas comprendre comment écrire ou synthétiser les méthodes de lecture pour seulement déclarer comme des pneus * pneus [4] (donc je dois utiliser NSArray et utiliser objectAtIndex

Voici la classe de voiture.

#import "Tire.h" 
#import "Engine.h" 

@interface Car : NSObject 
{ 
    Engine *engine; 
    Tire *tire1; 
    Tire *tire2; 
    Tire *tire3; 
    Tire *tire4; 
    NSArray *tirearray; 
} 

@property (nonatomic, copy) id engine; 
@property (nonatomic, copy) id tire; 
@property (nonatomic, copy) id tirearray; 

@implementation Car 

@synthesize engine; 
@synthesize tire; 
@synthesize tirearray; 

- (void) print { 

    NSLog(@"%@", engine); 

} 

- (id) init { 

    if (self = [super init]) { 
     engine = [Engine new]; 
     tire1 = [[tire alloc] init]; 
     tire2 = [[tire alloc] init]; 
     tire3 = [[tire alloc] init]; 
     tire4 = [[tire alloc] init]; 
     tirearray = [NSArray arrayWithObjects: tire1, tire2, tire3, tire4, nil]; 
    } 

    return (self); 

} 

Puis principale:

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    Car *car = [[Car alloc] init]; 

    [[car.tirearray objectAtIndex:0] setPressure: 32]; 


    [pool drain]; 
    return 0; 
} 

Ce que je suis en train de faire est de comprendre comment envoyer des messages aux objets du tableau qui est tout ce que je veux faire le code ci-dessus construit, mais retourne exception non!. 'NSRangeException', raison: '*** - [NSArray objectAtIndex:]: index (0) au-delà des limites (0) '!!! Comme vous le savez, la pression est juste une variable membre de la classe des pneus, et les méthodes getter ont été synthétisées. Puis je veux imprimer quelque chose à la console comme "La pression du pneu X est X PSI".

Cela me rend fou! Cela devrait être simple! AHHHH.

Merci d'avance!

Répondre

0

Oh man. Je me sens si bête. Je n'ai pas initialisé le tableau du tout! Je dois allouer puis initialiser avec initWithObjects. Haha. Oops.

+0

Mais je reçois toujours une erreur. S'il vous plaît aider !!! –

+0

1. N'écrivez pas de réponse, modifiez la question. 2. Quelle est l'erreur que vous obtenez maintenant et où? – JeremyP

+0

Merci. Je viens de commencer à utiliser StackOverflow et je n'ai pas vraiment compris comment l'utiliser. Je garderai cela à l'esprit! "Réponse" est différent du commentaire. J'ai compris: P –

1

Le code

 tire1 = [[tire alloc] init]; 

devrait être

 tire1 = [[Tire alloc] init]; 

Qui vous a dit de déclarer une propriété comme id? C'est une très, très, très mauvaise pratique et vous devriez l'arrêter maintenant. Maintenant.

Si vous avez acheté un manuel qui le dit, veuillez le graver maintenant en cendres.

En déclarant votre propriété

@property (nonatomic, copy) Tire* tire; 

le compilateur vous préviens à

 tire1 = [[tire alloc] init]; 

disant que tire ne répond pas à alloc.

Questions connexes