Question

Je suis un débutant en Obj-C. Je dois apprendre ce mieux ainsi me dire s'il vous plaît ce que je fais mal ..

J'ai un tableau d'images .... à différents points de exec je dois remplacer le dernier élément avec l'une des images précédentes ... de sorte que la dernière image reproduit toujours l'une des images avant. Quand je fais le remplacement, il jette une exception! Si je supprime l'appel à setCorrectImage, cela fonctionne.

Je ne suis pas en mesure de comprendre cela depuis quelques heures maintenant: - (


La déclaration du Controller.h est la suivante -

NSMutableArray      *imageSet;
UIImage *img, *img1, *img2, *img3, *img4, *img5;

Le tableau est initialisé dans le dispositif de commande -

-(void)loadStarImageSet
{

    NSString *imagePath = [[NSBundle mainBundle] pathForResource:AWARD_STAR_0 ofType:@"png"], 
    *imagePath1 = [[NSBundle mainBundle] pathForResource:AWARD_STAR_1 ofType:@"png"],
    *imagePath2 = [[NSBundle mainBundle] pathForResource:AWARD_STAR_2 ofType:@"png"],
    *imagePath3 = [[NSBundle mainBundle] pathForResource:AWARD_STAR_3 ofType:@"png"],
    *imagePath4 = [[NSBundle mainBundle] pathForResource:AWARD_STAR_4 ofType:@"png"],
    *imagePath5 = [[NSBundle mainBundle] pathForResource:AWARD_STAR_5 ofType:@"png"]    
    ;

    img  = [[UIImage alloc] initWithContentsOfFile:imagePath];
    img1 = [[UIImage alloc] initWithContentsOfFile:imagePath1];
    img2 = [[UIImage alloc] initWithContentsOfFile:imagePath2];
    img3 = [[UIImage alloc] initWithContentsOfFile:imagePath3];
    img4 = [[UIImage alloc] initWithContentsOfFile:imagePath4];
    img5 = [[UIImage alloc] initWithContentsOfFile:imagePath5];


    if(imageSet != nil)
    {
        [imageSet release];
    }
    imageSet = [NSArray arrayWithObjects:img, img1, img2, img3, img4, img5, img, nil];

    [imageSet retain];
}

Lorsque la vue semble que c'est ce qui se passe -

(void)viewDidAppear:(BOOL)animated
{
    [self processResults];

    [self setCorrectImage];

    [self animateStar];
}


-(void)setCorrectImage
{
    // It crashes on this assignment below!!!!!

    [imageSet replaceObjectAtIndex:6 withObject:img4]; // hard-coded img4 for prototype... it will be dynamic later
}

-(void) animateStar
{
    //Load the Images into the UIImageView var - imageViewResult
    [imageViewResult setAnimationImages:imageSet];

    imageViewResult.animationDuration = 1.5;
    imageViewResult.animationRepeatCount = 1;
    [imageViewResult startAnimating];
}
Était-ce utile?

La solution

imageSet = [NSArray arrayWithObjects:img, img1, img2, img3, img4, img5, img, nil];

Vous créez un objet NSArray (tableau non mutables) ici et l'attribuer à votre variable imageSet. Ceci est très mauvais parce que imageSet a été déclarée comme étant de type NSMutableArray *, et l'objet créé a le type NSArray et NSArray n'est pas un sous-type de NSMutableArray.

Ainsi, l'erreur se produit parce que l'objet est en fait un objet NSArray, non NSMutableArray (ou sous-classe de celle-ci), et donc ne prend pas en charge un message replaceObjectAtIndex:withObject:.

Vous devez créer un objet NSMutableArray à la place:

imageSet = [NSMutableArray arrayWithObjects:img, img1, img2, img3, img4, img5, img, nil];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top