Frage

Ich bin ein Neuling in OBJ-C. Ich muss das besser lernen, also bitte sag mir, was ich falsch mache.

Ich habe eine Reihe von Bildern ... an verschiedenen Sendungsstellen muss ich das letzte Element durch eines der vorhergehenden Bilder ersetzen ... also repliziert das letzte Bild immer eines der Bilder zuvor. Wenn ich den Ersatz mache, macht es eine Ausnahme! Wenn ich den Anruf zum SetCorrectImage entferne, funktioniert er.

Ich bin jetzt in den letzten Stunden nicht herausgefunden :-(


Die Erklärung im Controller.H ist wie folgt.

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

Das Array wird im Controller initialisiert -

-(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];
}

Wenn die Ansicht angezeigt wird, ist dies das, was passiert -

(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];
}
War es hilfreich?

Lösung

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

Sie erstellen eine NSArray (nicht tollbares Array) Objekt hier und zuweisen es Ihrem imageSet Variable. Das ist sehr schlecht, weil imageSet wurde von Typ deklariert NSMutableArray *, und das von Ihnen erstellte Objekt hat Typ NSArray, und NSArray ist kein Subtyp von NSMutableArray.

Der Fehler tritt also auf, weil das Objekt tatsächlich ein ist NSArray Objekt nicht NSMutableArray (oder Unterklasse davon) und unterstützt daher a replaceObjectAtIndex:withObject: Botschaft.

Sie sollten eine erstellen NSMutableArray Objekt stattdessen:

imageSet = [NSMutableArray arrayWithObjects:img, img1, img2, img3, img4, img5, img, nil];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top