2010-01-25 2 views
4

Je l'ai fait un peu juste de la recherche et pas vraiment trouvé une réponse à ma question si espérait que quelqu'un pourrait être en mesure de me diriger dans la bonne directionObjectif C: Retourne un tableau d'objets à partir d'une méthode de classe

Je suis novice en Objective C et j'ai un léger problème à réaliser quelque chose que j'imagine être assez simple; retour d'un NSArray d'objets à partir d'une méthode de classe

je la classe suivante avec la méthode de classe associée

@implementation Sale 

@synthesize title = _title; 
@synthesize description = _description; 
@synthesize date = _date; 

+(NSArray*)liveSales 
{ 
    NSArray *liveSales = [[NSArray alloc] init]; 

    for(int i = 0; i < 100; i++) 
    { 
     Sale *s = [[Sale alloc] init]; 
     [s setTitle:[NSString stringWithFormat:@"Sale %d", i+1]]; 
     [s setDescription:[NSString stringWithFormat:@"Sale %d descriptive text", i+1]]; 

     [liveSales addObject:s]; 

     [s release]; 
     s = nil; 
    } 

    return [liveSales autorelease]; 
} 

@end 

Et j'ai un ViewController avec le code suivant (garni pour faciliter la lecture):

@implementation RootViewController 

@synthesize saleList = _saleList; 


- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 

    [[self saleList] setArray:[Sale liveSales]]; 
} 

Le problème que je rencontre est que le nombre de venteList est toujours nulle, donc il semble que le tableau n'est pas défini. Si je débogue le code et entre dans la méthode de classe liveSales, il y a le bon nombre d'objets dans le tableau au point de retour

Est-ce que quelqu'un peut me diriger dans la bonne direction?

Merci :)

Dave

+0

Quelle est votre définition de 'saleList' dans' @ interface'? Quels avertissements recevez-vous du compilateur? – Yuji

Répondre

3

Probablement parce que saleList est nil pour commencer. Envoyer un message à nil en Objective-C (dans la plupart des cas) ne fait rien.

Essayez ceci:

self.saleList = [Sale liveSales]; 

(en supposant que la propriété est déclarée comme conserver).

+0

Merci Nicholas, cela semble avoir résolu le problème que j'avais. Savez-vous s'il y a un moyen de le faire sans avoir besoin d'utiliser la notation par points (j'essaie d'éviter que cela ne devienne confus au fur et à mesure que le code devient plus complexe)? – Dave

+2

'object.property = x' est équivalent à' [object setProperty: x] '. Il n'y a rien de déroutant à ce sujet ... ils sont vraiment équivalents! Donc, dans ce cas, ce serait '[self setSaleList: [Sale liveSales]]'. – Yuji

+0

Merci Yuji, cela a réalisé exactement ce que je voulais – Dave

4

Tout d'abord, vous devez allouer un NSMutableArray:

NSMutableArray *liveSales = [[NSMutableArray alloc] init]; 

La plaine NSArray est immuable par définition.

+0

Ne répond pas à distance à la question, mais pas de mauvais conseils, donc +0 je suppose. – Chuck

+0

Vous avez raison Dirk - J'avais déjà modifié le code pour utiliser un MutableArray mais le comportement que je vis existe toujours – Dave

Questions connexes