2010-02-10 4 views
0

Je suis assez nouveau pour le développement Objective C et iPhone ont frappé un problème qui m'a complètement déconcertéNSMutableArray d'objets de retour type UICGColor pendant cellForRowAtIndexPath événement

J'ai une classe, la vente, qui a la méthode de classe suivante :

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

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

    [liveSales addObject:s]; 

    [s release]; 
    s = nil; 
} 

return [liveSales autorelease]; 

}

Je puis en utilisant cette méthode de classe de la façon suivante:

#import "RootViewController.h" 
@implementation RootViewController 
@synthesize liveSales = _liveSales; 


- (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 navigationItem] setTitle:@"Sales"]; 

    if (![self liveSales]) 
    { 
     [self setLiveSales:[Sale liveSales]]; 
    } 

} 

Je puis personnalise mes cellules de la table l'événement suivant:

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell. 
    Sale *sale = [[self liveSales] objectAtIndex:[indexPath row]]; 

    [[cell textLabel] setText:[sale title]]; 
    [[cell detailTextLabel] setText:[sale description]]; 

    [sale release]; 
    sale = nil; 

    return cell; 
} 

Si je lance alors ce code à l'aide du simulateur je peux voir que chaque cellule de tableau indique les informations correctes et tout apparaît fonctionner correctement , qui est jusqu'à ce que je défiler au bas de la liste et l'application meurt avec les informations suivantes enregistrées dans la fenêtre de la console:

2010-02-10 20:23:50.741 AppName[1828:207] *** -[UICGColor title]: unrecognized selector sent to instance 0x3b05750 
2010-02-10 20:23:50.743 AppName[1828:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UICGColor title]: unrecognized selector sent to instance 0x3b05750' 
2010-02-10 20:23:50.744 AppName[1828:207] Stack: (
    29291611, 
    2510427401, 
    29673531, 
    29242998, 
    29095618, 
    8789, 
    3047008, 
    3013271, 
    3089642, 
    3053907, 
    55804592, 
    55804015, 
    55802054, 
    55801146, 
    55834680, 
    29078098, 
    29075039, 
    29072456, 
    37382029, 
    37382226, 
    2764803 
) 

J'ai passé quelques bonnes heures à essayer de comprendre ce qui se passe ici en vain, mais je suis sûr que je ' m manquant quelque chose de vraiment évident, ou approchant la logique de l'application de la mauvaise façon

Toute aide quiconque pourrait fournir serait grandement appréciée :)

Merci

Dave

Répondre

2

Vous faites une sortie supplémentaire dans:

// Configure the cell. 
Sale *sale = [[self liveSales] objectAtIndex:[indexPath row]]; 

[[cell textLabel] setText:[sale title]]; 
[[cell detailTextLabel] setText:[sale description]]; 

[sale release]; 
sale = nil; 

vente est une instance autoreleased obtenue à partir d'un tableau, ne relâchez pas.

+0

Merci Ahmet, ça a résolu le problème :) Je savais que ce serait quelque chose d'évident !! – Dave

+0

:) Il faut un certain temps pour s'habituer à conserver/relâcher correctement –

Questions connexes