2012-07-23 112 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