2012-07-23 125 views
0

我正在爲iPad創建幻燈片應用程序,當我讓用戶重新排列幻燈片時遇到了一些麻煩。當調用slideDropped方法時,如果我只是刪除幻燈片,然後將其添加到幻燈片的結尾,然後一切工作正常。如果我將5張幻燈片幻燈片放入幻燈片2並將其移至幻燈片3,則當我嘗試循環瀏覽slideshow.slides(這僅是NSMutableArray)時,它會在新幻燈片上出現訪問錯誤而崩潰。NSMutableArray insertObject:atIndex導致崩潰

-(void)slideDropped:(Slide *)slide 
{ 
    int destIndex = (int)(slide.frame.origin.x)/152; 
    destIndex = MIN(destIndex, slideshow.slides.count - 1); 
    destIndex = MAX(0, destIndex); 
    int sourceIndex = [slideshow.slides indexOfObject:slide]; 
    [slideshow removeSlideAtIndex:sourceIndex]; 
    if(destIndex >= slideshow.slides.count) 
     [slideshow addSlide:slide]; 
    else 
     [slideshow insertSlide:slide atIndex:destIndex]; 
    [self arrangeSlides]; 
} 

-(void)arrangeSlides 
{ 
    [scrSlideshow.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    int x = 0; 
    NSLog(@"There are %i slides",slideshow.slides.count); 
    for(Slide* slide in slideshow.slides) 
    { 
     NSLog(@"%@",slide);//crashes here on the new slide if I insert at a specific index rather than appending the slide to the end 
     CGRect frame = CGRectMake(x++ * 152, 21, 150, 150); 
     slide.frame = frame; 
     [scrSlideshow addSubview:slide]; 
    } 
    [scrSlideshow setContentSize:CGSizeMake(slideshow.slides.count * 152, 150)]; 
} 

//in the Slideshow class 

-(void)addSlide:(Slide *)slide 
{ 
    [slides addObject:slide]; 
} 

-(void)removeSlideAtIndex:(int)index 
{ 
    [slides removeObjectAtIndex:index]; 
} 

-(void)insertSlide:(Slide *)slide atIndex:(int)index 
{ 
    [slides insertObject:slides atIndex:index]; 
} 

任何想法,我可能做錯了什麼?我懷疑我沒有正確管理幻燈片,但我不知道該怎麼做。

回答

2

查看該代碼的底部。你有insertObject:slides。如果這只是「幻燈片」,或者你打算它是複數?這可能是你的問題

+0

謝謝!我一直盯着slideDropped和arrangeSlides方法這麼久,我甚至都沒想過去檢查insertSlide:atIndex:方法。 – nick 2012-07-23 22:50:18