나는 webservice 결과를 소비하는 작은 응용 프로그램을 작성하고 있습니다. 결과는 왼쪽의 SplitViewController에 표시되고 오른쪽에는 세부 정보가 표시됩니다. 결과를 얻기 전에 사용자가 로그인 화면을 통해 로그인하도록 요청합니다. 로그인 화면은 앱이 시작될 때마다 처음에 나타납니다. 나는 SplitViewController로 전환을위한 스토리 보드 SEGUE을 사용하고ViewController에서 SplitViewController 로의 로그인
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"LoginControllerSeque"] && [self doLogin]){
TMAppDelegate *appDelegate = (TMAppDelegate *)[[UIApplication sharedApplication]delegate];
// IPad
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *cvc = (UISplitViewController *)[segue destinationViewController];
[appDelegate.window setRootViewController:cvc];
}
// Other device
else {
UINavigationController *cvc = (UINavigationController *)[segue destinationViewController];
[appDelegate.window setRootViewController:cvc];
}
[appDelegate switchToMainView];
}
else{
alertView = [[UIAlertView alloc] initWithTitle:@"access denied" message:@"access denied" delegate:self cancelButtonTitle:@"back" otherButtonTitles:nil];
[alertView show];
}
하지만 더없이 아무것도하지 않습니다 나는 로그인 후 내 응용 프로그램의 RootViewController을 변경하여 로그인 프로세스를 관리
에 성공 행위. 내 AppDelegate에에서
는 다음과 같은 부분이 :
- (void)switchToMainView{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
TMMasterViewController *controller = (TMMasterViewController *)masterNavigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
} else {
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
TMMasterViewController *controller = (TMMasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
[self.window reloadInputViews];
[self.window makeKeyAndVisible];}
지금까지 모든 것이 작동하지만 지금은 로그인 화면을 다음과 내 SplitView의 detailViewController,에 PopoverView에서 로그 아웃 버튼을 가지고있다. 나는 그것을 같은 방식으로 할 수 있다고 생각, 그래서 내가 만든 :
- (IBAction)logout:(id)sender {
[self.currentPopover dismissPopoverAnimated:NO];
TMAppDelegate *appDelegate = (TMAppDelegate *)[[UIApplication sharedApplication]delegate];
[appDelegate.window setRootViewController:[appDelegate loginViewController]];
[appDelegate switchToLoginView];
}
과 AppDelegate에의
: 나는 두 번째 시간에 로그인하려고하면 지금- (void)switchToLoginView
{
[self.window reloadInputViews];
[self.window makeKeyAndVisible];
}
나는 오류가 발생 : 이유 : '- [UIPopoverController presentPopoverFromRect : inView : permittedArrowDirections : animated :] : 창이없는보기에서 팝업을 표시 할 수 없습니다.'
어째서 이것이 처음으로 작동하는지, 그리고 두 번째로 이러한 문제가 발생하는지 전혀 알 수 없습니다.
누구나 나를 도와 주거나 힌트를 줄 수 있습니까? 로그인을 처리하는 것이 잘못된 개념 일 수 있습니까?
UPDATE : 광고에 스테핑
// Beim IPad müssen wir uns anders verhalten als beim Phone
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UISplitViewController *cvc = (UISplitViewController *)[segue destinationViewController];
[appDelegate.window setRootViewController:cvc];
}
:
문제점이 부분에 정확하게 표시 [appDelegate.window setRootViewController : CVC];
나는'currentPopover'를 누가 소유하고 있는지 그리고 어떻게 인스턴스화하는지 살펴볼 것이다. UIPopoverController 클래스 ref는 "이 클래스의 인스턴스를 초기화 할 때 popover에 대한 내용을 제공하는보기 컨트롤러를 제공해야합니다."라고 말합니다. 이러는거야? 'contentViewController' 접근자를 호출하면 어떻게됩니까? 그것은 예상대로 UIViewController를 생성합니까? – Wienke
Popovers는 ViewController와 BarButton을 사용하여 스토리 보드에 정의됩니다. segue는 BarButton에서 ViewContoller로 이동하며 popover로 표시되도록 정의됩니다. 하지만 힌트를 주셔서 감사합니다. –