Reputation: 1352
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!")
})
Upvotes: 5
Views: 9268
Reputation: 711
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")
}
}
}
Upvotes: 0
Reputation: 1352
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
Upvotes: 7