2010-10-18 6 views
2

J'ai ce petit problème que je n'ai pas pu trouver dans Google: UITableView fonctionne très bien jusqu'à ce que je commence à défiler.- [NSCFString objectAtIndex:]: sélecteur non reconnu

Error Message: `-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x5f24870 ` 

Méthode:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *MyIdentifier = @"MyIdentifier";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];  
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; 
    } 
    // Set up the cell 
    int storyIndex = [indexPath indexAtPosition: [indexPath length]-1];  
    //populate cell 
    cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"]; 
    return cell;  
} 

juste deviné qui était le -method "problème" ... si vous avez besoin de plus d'infos: s'il vous plaît me dire :) Merci pour votre aide!

EDIT: monTableau est juste le NSArray *myArray normal, il est un tableau reclassées ->

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

resultArray (NSMutableArray) est le résultat d'un .. XML Parser espérons que vous pouvez voir mon problème ..

+1

comment créer objet myArray? – Vladimir

+0

merci pour le commentaire .. voir edit .. – dav3

Répondre

11

Il signifie que vous envoyez un objectAtIndex: messages à un objet de type NSString (ou éventuellement CFString). Bien sûr, vous attendez myArray pour être un tableau et non une chaîne.

Ce qui est probablement arrivé est que votre tableau est libéré (presque certainement autoreleased) trop tôt et qu'au moment où la méthode est appelée ci-dessus la mémoire qui était étant pointé par myArray détient désormais une chaîne.

En réponse à votre édition ...

Cette ligne:

myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

... est incorrect. La valeur est autoeleased. Vous devez le conserver:

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain]; 

N'oubliez pas de le libérer avant de fermer la vue!

+0

merci =) ça marche maintenant ... m'a fait plaisir =) – dav3

0

Si vous avez correctement identifié cette méthode comme le coupable, je devine que cette ligne est le problème:

cell.textLabel.text = [[myArray objectAtIndex: storyIndex] objectForKey: @"subject"]; 

Pour moi, il semble chaux myArray est une instance de NSCFString et non un NSArray. Vous devriez commencer par vérifier cela et ne jamais assigner autre chose que des instances NSArray à myArray.

--edit--

Essayez

self.myArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors]; 

Cela devrait bien conserver le tableau pour en glissement annuel pour vous assurer qu'il ne ramasse-miettes et remplacée par une chaîne de rouge :)

+0

merci beaucoup, ça marche maintenant, et je suis extrêmement heureux =) – dav3

0

myArray est probablement auto-libéré. Utilisez self.myArray pour définir le tableau trié.(Avec le @property correct (conserver))

+0

merci, ça marche =) Je suis heureux =) – dav3

0

Si monTableau est une variable d'instance au lieu d'une propriété, essayez:

myArray = [[resultArray sortedArrayUsingDescriptors:sortDescriptors] retain]; 
Questions connexes