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];
}
任何想法,我可能做錯了什麼?我懷疑我沒有正確管理幻燈片,但我不知道該怎麼做。
謝謝!我一直盯着slideDropped和arrangeSlides方法這麼久,我甚至都沒想過去檢查insertSlide:atIndex:方法。 – nick 2012-07-23 22:50:18