如何从presentView控制器返回到RootViewController? [英] How to go back to RootViewController from presentView controller?

查看:62
本文介绍了如何从presentView控制器返回到RootViewController?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个iPhone Photos Gallery应用程序,在我的应用程序中,我向图库中创建了一个文件夹,该图库文件夹显示在我的应用程序中,并在使用时单击Image导航到下一个视图控制器,他可以在其中查看完整的图片.尺寸图片,然后在此处设置垃圾箱按钮,以便用户可以删除照片,而我的垃圾箱代码是:

I am developing a iPhone Photos Gallery app and In my app I created one folder into gallery and that gallery folder is shown up into my app and while use click on Image its navigate to the next view controller where he can see a full size image and I set trash button there so user can delete that photos and my trashButton code is :

@IBAction func btnTrash(sender: AnyObject) {

    let alert = UIAlertController(title: "Delete Image", message: "Are You Sure To delete this Image?", preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: {(alertAction)in
        //Delete Photo

        PHPhotoLibrary.sharedPhotoLibrary().performChanges({
            let request = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
            request.removeAssets([self.photosAsset[self.index]])
            }, completionHandler: {(success, error )in
                NSLog("\nDeleted Image -> %@", (success ? "Success" : "Error"))
                alert.dismissViewControllerAnimated(true, completion: nil)

                self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
                if(self.photosAsset.count == 0){

                    // No photos Left
                    self.imgView.image = nil
                    println("No Image Left")

                    // Pop to root view controller
                    self.navigationController?.popToRootViewControllerAnimated(true)

                }
                if(self.index >= self.photosAsset.count){
                    self.index = self.photosAsset.count - 1
                }
                self.displayPhoto()
        })

    }))
    alert.addAction(UIAlertAction(title: "Cancle", style: .Cancel, handler: {(alertAction)in
    //Do not delete Photo

    self.dismissViewControllerAnimated(true, completion: nil)
    }))
    self.presentViewController(alert, animated: true, completion: nil)
}

我已经设置了是否没有剩余图像,将使用以下代码行导航到RootViewController:

I have set if there is not image left than use will navigate to the RootViewController with this line of code:

 self.navigationController?.popToRootViewControllerAnimated(true)

但是这不起作用,当删除最后一张图像时,我得到一个窗口:

But this is not working and when the last image is deleted I got a window:

我的控制台出现:

2014-11-05 16:45:11.502 Photos Gallary App[3046:115145] Adding Image to Library -> Success
2014-11-05 16:45:15.285 Photos Gallary App[3046:115146] 
Deleted Image -> Success
No Image Left
2014-11-05 16:45:15.287 Photos Gallary App[3046:115146] *** Terminating app due to uncaught exception 'NSRangeException', reason: '0x7f95fb5ef980: index (18446744073709551615) beyond bounds (0)'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000100e4f3f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010297dbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000100e4f32d +[NSException raise:format:] + 205
    3   Photos                              0x0000000100c5dd27 -[PHBatchFetchingArray objectAtIndex:] + 105
    4   Photos                              0x0000000100c63b92 -[PHFetchResult objectAtIndexedSubscript:] + 57
    5   Photos Gallary App                  0x0000000100b4d8d6 _TFC18Photos_Gallary_App9ViewPhoto12displayPhotofS0_FT_T_ + 694
    6   Photos Gallary App                  0x0000000100b50d93 _TFFFC18Photos_Gallary_App9ViewPhoto8btnTrashFS0_FPSs9AnyObject_T_U_FGSQCSo13UIAlertAction_T_U0_FTSbGSQCSo7NSError__T_ + 4243
    7   Photos Gallary App                  0x0000000100b4a6f6 _TTRXFo_dSboGSQCSo7NSError__dT__XFo_iTSbGSQS____iT__ + 38
    8   Photos Gallary App                  0x0000000100b4ed91 _TPA__TTRXFo_dSboGSQCSo7NSError__dT__XFo_iTSbGSQS____iT__ + 81
    9   Photos Gallary App                  0x0000000100b4a728 _TTRXFo_iTSbGSQCSo7NSError___iT__XFo_dSboGSQS___dT__ + 40
    10  Photos Gallary App                  0x0000000100b4a788 _TTRXFo_dSboGSQCSo7NSError__dT__XFdCb_dV10ObjectiveC8ObjCBooldGSQS___dT__ + 88
    11  libdispatch.dylib                   0x000000010541ccc6 _dispatch_call_block_and_release + 12
    12  libdispatch.dylib                   0x000000010543a7f4 _dispatch_client_callout + 8
    13  libdispatch.dylib                   0x0000000105425193 _dispatch_root_queue_drain + 1094
    14  libdispatch.dylib                   0x000000010542663c _dispatch_worker_thread2 + 52
    15  libsystem_pthread.dylib             0x00000001057d0ef8 _pthread_wqthread + 314
    16  libsystem_pthread.dylib             0x00000001057d3fb9 start_wqthread + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

有人可以告诉我发生了什么,对此有什么解决方案?

Can anybody tell me what is happening and what is the solution for this?

推荐答案

我发现我的问题的解决方案是:

I found solution for my question is :

 @IBAction func btnTrash(sender: AnyObject) {

    let alert = UIAlertController(title: "Delete Image", message: "Are You Sure To delete this Image?", preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "Yes", style: .Default, handler: {(alertAction)in
        //Delete Photo

        PHPhotoLibrary.sharedPhotoLibrary().performChanges({
            let request = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
            request.removeAssets([self.photosAsset[self.index]])
            }, completionHandler: {(success, error )in
                NSLog("\nDeleted Image -> %@", (success ? "Success" : "Error"))

                alert.dismissViewControllerAnimated(true, completion: nil)

                // here is the code for go back to root view controller

                if(success){
                    // Move to the main thread to execute
                    dispatch_async(dispatch_get_main_queue(), {
                        self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
                        if(self.photosAsset.count == 0){
                            println("No Images Left!!")
                            self.navigationController?.popToRootViewControllerAnimated(true)
                        }else{
                            if(self.index >= self.photosAsset.count){
                                self.index = self.photosAsset.count - 1
                            }
                            self.displayPhoto()
                        }
                    })
                }else{
                    println("Error: \(error)")
                }
        })


    }))
    alert.addAction(UIAlertAction(title: "Cancle", style: .Cancel, handler: {(alertAction)in
    //Do not delete Photo

    self.dismissViewControllerAnimated(true, completion: nil)
    }))
    self.presentViewController(alert, animated: true, completion: nil)
}

这篇关于如何从presentView控制器返回到RootViewController?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆