Iphone 从UITabBarController和切换选项卡中解除imagePickerController会导致NSRangeException

Iphone 从UITabBarController和切换选项卡中解除imagePickerController会导致NSRangeException,iphone,objective-c,ios,nsrangeexception,Iphone,Objective C,Ios,Nsrangeexception,我有一个选项卡栏控制器,其中一个选项卡会打开相机。一旦用户不拍照,我希望他们转到另一个选项卡,列出他们迄今为止拍摄的照片,并保存在应用程序目录中 这就是我拒绝使用相机的原因: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = [info objectForKey:

我有一个选项卡栏控制器,其中一个选项卡会打开相机。一旦用户不拍照,我希望他们转到另一个选项卡,列出他们迄今为止拍摄的照片,并保存在应用程序目录中

这就是我拒绝使用相机的原因:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    UIImage *originalImage;

    // Handle a still image capture
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0)
        == kCFCompareEqualTo) {

        originalImage = (UIImage *) [info objectForKey:
                                     UIImagePickerControllerOriginalImage];

        NSData* imageData = UIImagePNGRepresentation(originalImage);

        //Save the file to documents directory
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                             NSUserDomainMask, YES);
        NSString* documentsDirectory = [paths objectAtIndex:0];
        NSString* filename = [NSString stringWithFormat:@"img_%@.png", [[NSDate date] description]];
        NSString* path = [documentsDirectory stringByAppendingPathComponent:filename];
        [imageData writeToFile:path atomically:YES];
        [newPicturesPaths addObject:path];

        if(hasConnected) [self upload];
        [self dismissViewControllerAnimated:YES completion:^(void) { [self goToPendingView]; }]; // The debugger puts the crash on this line but AFTER goToPendingView has finished!
        cameraOn = NO;
    }
}
这就是我准备表格和切换选项卡栏控制器所选选项卡的方式:

- (void)goToPendingView
{
    [self buildPendingList];
    [(PLEListViewController*)[self.viewControllers objectAtIndex:2] setList:pendingList]; //pendingList is an array
    [self setSelectedIndex:2];
} // The debugger comes this far without a crash
错误是

***由于未捕获的异常“NSRangeException”而终止应用程序,原因:“***-[\u NSCFConstantString substringto index:]:范围或索引超出范围” ***第一次抛出调用堆栈: 0x3a7173e7 0x395a3963 0x3a717307 0x3a945a47 0x9c7a3 0x928b9 0x39a45541 0x39a2a361 0x39a417ff 0x399fd897 0x37f004eb 0x37f0008d 0x37f00fb1 0x37f0099b 0x37f007ad 0x39a0390f 0x3a6ec941 0x3A6EA39 0x3AF93 0x3a65e23d 0x3A65E09 0x3799733b 0x39a4e291 0x66049 0x3AE4B20 libc++abi.dylib:terminate调用引发异常

有没有人能帮你找出原因

编辑:我忘了提这个。我在关闭相机后将[self goToPendingView]放入完成块的原因是如果我这样做

    if(hasConnected) [self upload];
    [self dismissViewControllerAnimated:YES completion:nil];
    cameraOn = NO;
    [self goToPendingView];

我被困在相机视图上,按下“使用”按钮,什么也没发生,这让我觉得这样做不知何故阻塞了我所有的线程

我假设崩溃实际上发生在PLEListViewController中——可能发生在viewDidLoad或表数据源中。你对图像名称做了些什么吗?例如,缩短?与名称无关。我只是在documents目录中构建了一个文件路径数组,表视图应该显示这个数组。相同的表视图代码适用于应用程序中具有不同数据数组的另一个选项卡。我确实发现列表视图控制器的viewDidLoad在崩溃之前被调用。我仍然不确定如何确定是什么原因导致了这种情况,因为跟踪只是来自UIApplicationMain。请尝试单步通过tableView:CellForRowatineXpath:并检查它是否在那里崩溃。也许可以在你的问题中添加PLEListViewController的代码,因为很难想象你的代码会做什么。你是对的。问题出在我的自定义表视图单元格中。当抛出异常时,它直接来自UIApplicationMain,因此我很难调试。多亏了我学习了破译异常,这就准确地指出了它。我应该自己回答吗?太好了。编辑您的问题并将其标记为已关闭。如果你愿意,请投票表决我的意见。