gpt4 book ai didi

ios - 解除多个 View Controller 的委托(delegate)问题

转载 作者:行者123 更新时间:2023-11-29 04:30:29 26 4
gpt4 key购买 nike

我之前问过一个关于解除多个 View Controller 的问题,我得到的答案以及我在其他地方找到的可能的解决方案都未能达到预期的效果。我已将问题范围缩小到我组建代表团的方式。代码如下,我非常感谢任何反馈。

我的完整项目可以在这里下载:https://www.yousendit.com/download/TEhWckhYQVNYSHpIRHNUQw

谢谢。

//
// QuestionViewController.h
// learningTheRopes1
//
// Created by James Ulle on 7/18/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Question.h"
#import "AnswerViewController.h"

@interface QuestionViewController : UIViewController <AnswerViewControllerDelegate>

@property (weak, nonatomic) IBOutlet UILabel *currentQuestionDisplay;

@property (weak, nonatomic) IBOutlet UITextField *userAnswerTextField;

@property (nonatomic, strong) Question *currentQuestion;

- (IBAction)dismissKeyboard:(id)sender;

- (void)dismissQVC;

@end

//
// QuestionViewController.m
// learningTheRopes1
//
// Created by James Ulle on 7/18/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "QuestionViewController.h"

@interface QuestionViewController ()

@end

@implementation QuestionViewController

@synthesize currentQuestionDisplay;
@synthesize userAnswerTextField;
@synthesize currentQuestion;

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
AnswerViewController *avc = [segue destinationViewController];
[avc setCurrentQuestion:currentQuestion];
[avc setUserAnswer:[userAnswerTextField text]];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

[self.currentQuestionDisplay setText:[currentQuestion question]];

// Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
[self setCurrentQuestionDisplay:nil];
[self setUserAnswerTextField:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)dismissKeyboard:(id)sender {
[userAnswerTextField resignFirstResponder];
}

- (void)dismissQVC {
NSLog(@"Dismiss QVC");
[self.navigationController popViewControllerAnimated:NO];
}

@end

//
// AnswerViewController.h
// learningTheRopes1
//
// Created by James Ulle on 7/18/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Question.h"

@protocol AnswerViewControllerDelegate <NSObject>
- (void)dismissQVC;
@end

#import "QuestionViewController.h"

@interface AnswerViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *displayCurrentAnswer;

@property (nonatomic, strong) Question *currentQuestion;

@property (nonatomic, strong) NSString *userAnswer;

@property (nonatomic, weak) id <AnswerViewControllerDelegate> delegate;

- (IBAction)dismissAnswerVC:(id)sender;

@end

//
// AnswerViewController.m
// learningTheRopes1
//
// Created by James Ulle on 7/18/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "AnswerViewController.h"

@interface AnswerViewController ()

@end

@implementation AnswerViewController

@synthesize displayCurrentAnswer;
@synthesize currentQuestion;
@synthesize userAnswer;
@synthesize delegate;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

if([userAnswer isEqualToString:currentQuestion.answer]) {
[self.displayCurrentAnswer setText:@"You are correct!"];
}
else {
[self.displayCurrentAnswer setText:@"You are wrong!"];
}

// Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
[self setDisplayCurrentAnswer:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (IBAction)dismissAnswerVC:(id)sender {
[self dismissViewControllerAnimated:YES completion:^{

NSLog(@"Dismiss AVC");
[[self delegate] dismissQVC];

}];

}

@end

最后我的输出是这样的(这表明确实调用了完成 block ,但是没有发生对 dimissQVC 的委托(delegate)回调:

2012-08-03 19:04:34.235
learningTheRopes1[4165:f803] Dismiss AVC

最佳答案

在prepareForSegue方法中,您错过了这一行:

avc.delegate = self;

关于ios - 解除多个 View Controller 的委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com