0

我目前遇到数组超出范围的问题,找不到解决方法。我从我的崩溃报告中怀疑我的这部分代码有问题。任何建议,我应该如何解决这个问题?随意询问特定代码。

-(void)viewDidLoad
{
    NSLog(@"a");
    [super viewDidLoad];    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSFileManager *fileManager  = [NSFileManager defaultManager];

    //configure carousel1
    NSString *fPath = [documentsDirectory stringByAppendingPathComponent:@"Tops"];
    NSArray *directoryContent = [fileManager directoryContentsAtPath: fPath];
    imageArray1 = [directoryContent mutableCopy];
    NSLog(@"%@", [imageArray1 objectAtIndex:0]);←This line is 70
    NSLog(@"1:::%d", [imageArray1 count]);

    //configure carousel2
    fPath = [documentsDirectory stringByAppendingPathComponent:@"Bottoms"];
    directoryContent = [fileManager directoryContentsAtPath:fPath];
    NSLog(@"%@", fPath);
    imageArray2 = [directoryContent mutableCopy];
    NSLog(@"2:::%d", [imageArray2 count]);

    carousel1.type = iCarouselTypeLinear;
    carousel2.type = iCarouselTypeLinear;

    [carousel1 reloadData];
    [carousel2 reloadData];

    carousel1.delegate = self;
    carousel1.dataSource = self;
    carousel2.delegate = self;
    carousel2.dataSource = self;
}

更新

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x2edecf4e __exceptionPreprocess + 126
1   libobjc.A.dylib                 0x390986aa objc_exception_throw + 34
2   CoreFoundation                  0x2ed235ee -[__NSArrayM objectAtIndex:] + 226
3   Appname                         0x000acab8 -[iCarouselExampleViewController viewDidLoad] (iCarouselExampleViewController.m:70)
4   UIKit                           0x315625fe -[UIViewController loadViewIfRequired] + 514
5   UIKit                           0x315623bc -[UIViewController view] + 20
6   UIKit                           0x3160c632 -[UIViewController shouldAutorotate] + 22
7   UIKit                           0x31648d76 -[UIViewController _preferredInterfaceOrientationForPresentationInWindow:fromInterfaceOrientation:] + 246
8   UIKit                           0x316476ae -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:animation:] + 2054
9   UIKit                           0x31646700 -[UIViewController presentViewController:withTransition:completion:] + 4664
10  UIKit                           0x31821656 -[UIViewController presentModalViewController:animated:] + 26
11  UIKit                           0x31592f3a -[UIApplication sendAction:to:from:forEvent:] + 86
12  UIKit                           0x31592eda -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 26
13  UIKit                           0x31592eb4 -[UIControl sendAction:to:forEvent:] + 40
14  UIKit                           0x3157eb3a -[UIControl _sendActionsForEvents:withEvent:] + 370
15  UIKit                           0x3159292a -[UIControl touchesEnded:withEvent:] + 586
16  UIKit                           0x315925fc -[UIWindow _sendTouchesForEvent:] + 524
17  UIKit                           0x3158d688 -[UIWindow sendEvent:] + 828
18  UIKit                           0x31562a20 -[UIApplication sendEvent:] + 192
4

2 回答 2

0

您没有分享有帮助的日志输出,也没有分享有帮助的委托方法。也就是说,您应该在设置数据源和委托之后将 reloadData 作为最后一条消息发送 - 作为一种好的做法(最近 iOS 似乎将操作推迟到运行循环结束)。

于 2013-10-20T12:27:45.830 回答
0

如果我冒险猜测,该目录是空的。

imageArray1 = [directoryContent mutableCopy];
NSLog(@"%@", [imageArray1 objectAtIndex:0]);←This line is 70

如果imageArray1没有内容,第 70 行将崩溃,正如您的报告所示。[imageArray1 count]您应该检查并仅在有值时才使用它,而不是崩溃。您的代码实际上并没有对这些数组做任何事情,但这是它应该看起来的结构。您还需要对 carousel2 执行相同的操作。

//configure carousel1
NSString *fPath = [documentsDirectory stringByAppendingPathComponent:@"Tops"];
NSArray *directoryContent = [fileManager directoryContentsAtPath: fPath];
imageArray1 = [directoryContent mutableCopy];
if ([imageArray1 count] > 0) {
    NSLog(@"%@", [imageArray1 objectAtIndex:0]); //This line is 70
    NSLog(@"1:::%d", [imageArray1 count]);
} else {
    NSLog(@"No objects in imageArray1.");
}
于 2013-10-20T12:33:56.893 回答