我目前有一个数组出界问题,无法找到解决方法。我怀疑从我的崩溃报告中我遇到了这部分代码的问题。任何建议,我该如何解决这个问题?随意询问具体代码。
-(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
答案 0 :(得分:0)
您没有共享日志的输出,这将有所帮助,也没有您的委托方法,这将有所帮助。也就是说,在设置数据源和委托之后,你应该将reloadData作为最后一条消息发送 - 这是一种很好的做法(似乎最近iOS推迟了动作直到运行循环结束)。
答案 1 :(得分: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.");
}