데이터 모델에 저장된 데이터가 ViewController
있는지 여부 를 제시하려고합니다 . 하지만 다음과 같은 오류가 발생합니다.
경고 : *보기가 창 계층 구조에없는 경우에 *를 표시하려고합니다. ”
관련 코드 :
override func viewDidLoad() {
super.viewDidLoad()
loginButton.backgroundColor = UIColor.orangeColor()
var request = NSFetchRequest(entityName: "UserData")
request.returnsObjectsAsFaults = false
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var results:NSArray = context.executeFetchRequest(request, error: nil)!
if(results.count <= 0){
print("Inga resultat")
} else {
print("SWITCH VIEW PLOX")
let internVC = self.storyboard?.instantiateViewControllerWithIdentifier("internVC") as internViewController
self.presentViewController(internVC, animated: true, completion: nil)
}
}
Google을 사용하여 찾은 다른 솔루션을 성공하지 못했습니다.
답변
코드의이 시점에서 뷰 컨트롤러의 뷰는 생성되었을뿐 뷰 계층에 추가되지 않았습니다. 가능한 한 빨리 해당 뷰 컨트롤러에서 viewDidAppear
프레젠테이션하려면 가장 안전 해야합니다 .
답변
객관적인 C에서 : 이것은 mpmovieplayer 위에 viewcontroller를 표시 할 때 내 문제를 해결했습니다.
- (UIViewController*) topMostController
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
return topController;
}
답변
스위프트 3
나는 이것을 초보자로 계속해서 올렸고 현재는 무시할 수있는 모달 뷰를로드하지만 모달을 표시 할 필요가없는 경우 루트 컨트롤러로 전환하는 것이 가장 좋습니다.
나는 이것을 사용하고 있었다
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard?.instantiateViewController(withIdentifier: "MainAppStoryboard") as! TabbarController
present(vc, animated: false, completion: nil)
내 tabController와 함께 대신 이것을 사용하십시오.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let view = storyboard.instantiateViewController(withIdentifier: "MainAppStoryboard") as UIViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
//show window
appDelegate.window?.rootViewController = view
여러 스토리 보드 화면간에 전환해야하는 경우보기 컨트롤러로 조정하면됩니다.
답변
스위프트 3.
이 함수를 호출하여 최상위 뷰 컨트롤러를 가져온 다음 해당 뷰 컨트롤러를 제공합니다.
func topMostController() -> UIViewController {
var topController: UIViewController = UIApplication.shared.keyWindow!.rootViewController!
while (topController.presentedViewController != nil) {
topController = topController.presentedViewController!
}
return topController
}
용법:
let topVC = topMostController()
let vcToPresent = self.storyboard!.instantiateViewController(withIdentifier: "YourVCStoryboardID") as! YourViewController
topVC.present(vcToPresent, animated: true, completion: nil)
답변
SWIFT 용
func topMostController() -> UIViewController {
var topController: UIViewController = UIApplication.sharedApplication().keyWindow!.rootViewController!
while (topController.presentedViewController != nil) {
topController = topController.presentedViewController!
}
return topController
}
답변
지연 시간이있는 선택기를 수행하면됩니다 (0 초 작동).
override func viewDidLoad() {
super.viewDidLoad()
perform(#selector(presentExampleController), with: nil, afterDelay: 0)
}
@objc private func presentExampleController() {
let exampleStoryboard = UIStoryboard(named: "example", bundle: nil)
let exampleVC = storyboard.instantiateViewController(withIdentifier: "ExampleVC") as! ExampleVC
present(exampleVC, animated: true)
}
답변
스위프트 4
func topMostController() -> UIViewController {
var topController: UIViewController = UIApplication.shared.keyWindow!.rootViewController!
while (topController.presentedViewController != nil) {
topController = topController.presentedViewController!
}
return topController
}