5

This question has been asked many times but even after trying most of the possible things I am still unable to find a solution that works for me. Here is the error message.

Warning: Attempt to present on <0x7f8f29e17590> whose view is not in the window hierarchy!

Note: I am not using any navigation controller.

I am just presenting a view controller modally and I have a button on it for linkedIn sign up. But every time I click the linkedin button this error appears and I am unable to see the new linkedIn dialog although it works fine in other classes.

Most solutions recommend handling button click in viewDidAppear already tried that and it doesn't work.

I am using this code for opening linkedIn signup form

linkedinHelper.authorizeSuccess({ [unowned self] (lsToken) -> Void in

        print("success lsToken: \(lsToken)")
        self.requestProfile()
        }, error: { [unowned self] (error) -> Void in

            print("Encounter error: \(error.localizedDescription)")
        }, cancel: { [unowned self] () -> Void in

            print("User Cancelled!")
    })
Moaz Khan
  • 1,272
  • 1
  • 13
  • 28

2 Answers2

7

I have resolved the issue the main problem is exactly what it says the view is not in the view hierarchy. In order to resolve this issue we need to set the root view controller to the current view controller using the appDelegate object. So that the view now comes in the view hierarchy and be able to present further views. Here is the code

let initialViewController = UIStoryboard(name: "Main", bundle:nil).instantiateInitialViewController() as UIViewController
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
appDelegate.window?.rootViewController = initialViewController

Please read this for further information. https://stackoverflow.com/a/27608804/5123516

Moaz Khan
  • 1,272
  • 1
  • 13
  • 28
  • 1
    Another thing that you can do is to set the root view controller as the navigationController it's a much better approach and helped in avoiding memory leaks in my case. – Moaz Khan Feb 23 '18 at 08:27
0

In my instance, I was navigating to my home view, which had a sheet modifier. Once I removed the sheet modifier, the warning message went away. To maintain my sheet modifier, I created a separate view for it (below) and can now navigate to Home() directly, which was satisfactory for my requirements.

struct IntroSheetView: View {
    @State private var isPresented = true
    
    var body: some View {
        Home()
            .sheet(isPresented: $isPresented) {
                Text("Sheet content")
            }
    }
}