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 に答える