편집VC를 수동으로로드하기 위해 Segue를 트리거 할 수 없습니다. self.navigationController는 Nil입니까?
좀 더이 명확하게되었다 주위에 파고 후 그 나는 사파리에서 내가 SEGUE하지 않는다는 예외가에/빠른 애플리케이션 스위치 다음 뷰 컨트롤러 클래스에서 SEGUE를 호출하려고하면 있다. 그것은 확실히, 화면에로드 된 VC에서, 그리고 철자를 검사하고 100 % 맞습니다.
심지어 더 이상하게 만드는 것은 IBAction에서 정확히 동일한 메서드를 호출하면 잘 작동한다는 것입니다. 여기
내가 사용하고있는 코드입니다 :-(void)goToPhotoPage{
[self performSegueWithIdentifier:@"twitterAuthComplete" sender:self];
}
응용 프로그램의 이력서는 내가 다른 아무것도하지 않고 더불어있는 UIButton에 부착이 IBAction를에서 호출 그러나 경우에 예외를 얻을 때 나는이를 호출하는 경우 segue는 예상대로 작동하고 예외도 없습니다.
- (IBAction)twitterToPhoto:(id)sender
{
[self goToPhotoPage];
}
rrrrgrghrhhgrgrg!
나는 페이스 북/트위터에 사용자의 사진을 업로드 아이 패드 응용 프로그램 작업입니다
원래의 질문. 응용 프로그램이 난을 재 각성 할 때
내가 트위터 OAuth를 할 사파리로 이동해야하는 과정의 일환으로 앱이 후 특정 URL을 통해 다시 점프 얻을
는 토큰 등의 이유로 그러나입니다 segue를 트리거하거나 VC를 수동으로로드 할 수 없습니다.
내 AppDelegae에서 업로드 블록이 완료되어 VC에서 메서드를 호출하여 회 전자를 닫고 성공보기로 전환 할 때 호출됩니다.
예상대로 회 전자가 멈 춥니 다. 그러나 어떤 시도를해도 문제가 발생하지는 않습니다.
모든 것이 연결되고, segue에 ID가 있으며 콘솔에 오류 또는 예외가 표시되지 않습니다. 아무 일도 일어나지 않습니다. 이 시점 이후에 segue가 작동하도록 코드를 생성 할 수있는 유일한 방법은 사용자 트리거를 사용하여 하나의 UIButton에 연결 한 다음 다시 완료하는 것입니다.A의
- (void)triggerSuccess
{
[self segueToSuccess];
}
- (void)segueToSuccess
{
[self hideMessage];
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"done"];
[self.navigationController pushViewController:controller animated:YES];
}
:
- (void)triggerSuccess
{
[self segueToSuccess];
}
- (void)segueToSuccess
{
[self hideMessage];
[self.navigationController performSegueWithIdentifier:@"approveSegue" sender:self];
}
뿐만 아니라 : 나는 다음 시도 한 VC에
- (void)postToTwitter:(NSString*)postText image:(UIImage*)image
{
NSData *data = UIImageJPEGRepresentation(image, 0.5);
[_twitter postStatusUpdate:postText
mediaDataArray:@[data]
possiblySensitive:nil
inReplyToStatusID:nil
latitude:nil
longitude:nil
placeID:nil
displayCoordinates:nil
uploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
} successBlock:^(NSDictionary *status) {
ViewController * vc = [[ViewController alloc]init];
[vc triggerSuccess];
} errorBlock:^(NSError *error) {
ViewController * vc = [[ViewController alloc]init];
[vc uploadFail:error];
}];
}
: 여기
내 AppDelegate에있는 콜백 코드입니다 순수한 절망의 순간 나는 심지어 시험했다 :- (void)triggerSuccess
{
[self segueToSuccess];
}
- (void)segueToSuccess
{
[self hideMessage];
//[self.navigationController performSegueWithIdentifier:@"approveSegue" sender:self];
[self dismissViewControllerAnimated:NO completion:nil];
[self.navigationController popToRootViewControllerAnimated:NO];
[self performSelector:@selector(segueToSuccessPart2) withObject:nil afterDelay:0.25];
}
- (void)segueToSuccessPart2
{
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"done"];
[self.navigationController pushViewController:controller animated:YES];
}
분명히 뭔가를 놓쳤습니다. 그리고 응용 프로그램을 백그라운드로 이동하고 VC가 메모리에서 "언로드"되고 재 - instatiating이 필요하다고 생각합니다. 그걸로 시작하자.
나는 창문 밖으로 컴퓨터를 던져 버릴 테니 어떤 도움이라도 대단히 감사하겠습니다. .
[self dismissViewControllerAnimated:NO completion:nil];
[self.navigationController popToRootViewControllerAnimated:NO];
self.navigationController는 무기 호입니다 :
감사
가레스
를 해결 좀 더 일을 한 후 편집 한
은 VC에서이 통화 중에 나타납니다. . .
내가보고있는 문제의 원인 일 가능성이 높습니다. 킬린에 의해 제안
편집
2 그래서 나는 내가 탐색 컨트롤러를 유지 있는지 확인하려합니다.
나는 AppDelegte에서 다음을 수행 한 :
@property (nonatomic, strong) UINavigationController *navController;
및
@synthesize navController;
하지만 아래의 코드를 사용하여 VC에서이 액세스하려고 할 때, 그것은 여전히 전무입니다. . 나는 또한 탐색 컨트롤러를 의미 AppDelegate에,이를 추가 한 3
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
UINavigationController *navController = appDelegate.navController;
[self dismissViewControllerAnimated:NO completion:nil];
[navController popToRootViewControllerAnimated:NO];
편집은 더 이상 무기 호입니다. 그러나 여전히 아무 일도 일어나지 않습니다. . .
안녕 킬린, 당신의 빠른 응답 주셔서 감사합니다. 명확히하기 위해, 나는 수동으로 VC에서 목적지 VC까지의 스토리 보드에 segue를 생성하고 식별자를 부여했습니다. 흥미롭게도 나는 좀 더 많은 문제 해결을했고, rootVC에 pop하려고 할 때 self.navigationController는 nil 인 것처럼 보입니다. 나는이 문제의 근원이라고 생각합니다. –
아마 네, AppDelegate의 내비게이션 컨트롤러 나 다른 곳의 네비게이션 컨트롤러에 대한 강력한 참조를 보유하고 있습니까? – kelin
아니요 표준 상용구 이외의 탐색 컨트롤러를 고정하는 데 아무 것도 추가하지 않았습니다. –