2

tableViewの詳細ビューのプロトコルを作成しようとしています。詳細ビューには、質問と回答があります。正解すると 、プロトコルメソッドで整数が1ずつ増えるように設定されます。

私はプロトコルに不慣れで、何が間違っているのか理解していません。

コード

DetailViewController.h

プロトコルが作成される場所

#import "Question.h"

@protocol DetailQuestionViewControllerDelegate <NSObject>
-(void)questionsCorrectHasChangedTo:(int)questionNumberChanged;
@end

@interface DetailQuestionViewController : UIViewController

@property (nonatomic, strong) Question *selectedQuestion;

@property (strong, nonatomic) IBOutlet UILabel *questionLabel;
@property (strong, nonatomic) IBOutlet UITextField *answerField;
@property (strong, nonatomic) IBOutlet UILabel *correctLabel;
@property (nonatomic,strong) id <DetailQuestionViewControllerDelegate> delegate;

@property (assign, nonatomic) int questionsCorrect;

DetailViewController.m

@implementation DetailQuestionViewController

@synthesize questionLabel;
@synthesize answerField;
@synthesize correctLabel;
@synthesize selectedQuestion;
@synthesize questionsCorrect;
@synthesize delegate;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Sets the questionLabel to the question we put in the array
    self.questionLabel.text = [selectedQuestion questionName]; 

    // Sets the navigation title to the rowName we put in the array
    self.navigationItem.title = [selectedQuestion questionRowName]; 

   NSLog(@"The question's answer for the question you selected is %@", [selectedQuestion questionAnswer]);


}

- (IBAction)checkAnswer:(UITextField *)sender
{

    if ([[selectedQuestion questionAnswer] caseInsensitiveCompare:answerField.text] == NSOrderedSame)
    {
        // Show the  correct label
        [correctLabel setHidden:NO];
        correctLabel.text = @"Correct!";
        correctLabel.textColor = [UIColor greenColor];
        *questionsCorrect = 1;
        NSLog(@"questionsCorrect int is %d", questionsCorrect);
        [self.delegate questionsCorrectHasChangedTo:questionsCorrect];*

    }
        else
        {
            // Show the incorrect label
            [correctLabel setHidden:NO];
            correctLabel.text = @"Incorrect";
            correctLabel.textColor = [UIColor redColor];

        }

        // Erase the text in the answerField
        answerField.text = @"";
}

ScoreViewController.h

これが私のScoreViewで、デリゲートを評価します。

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

@interface ScoreViewController : UIViewController *<DetailQuestionViewControllerDelegate>*


@property (strong, nonatomic) IBOutlet UILabel *scoreLabel;

- (IBAction)resetButtonClicked:(UIButton *)sender;
-(void)checkScore;

@end

ScoreViewController.m

#import "ScoreViewController.h"
#import "DetailQuestionViewController.h"

@interface ScoreViewController ()

@end

@implementation ScoreViewController
@synthesize scoreLabel;

- (void)viewDidLoad
{
    [super viewDidLoad];

    *DetailQuestionViewController *dqvc = [[DetailQuestionViewController alloc] init];
    dqvc.delegate = self;*

}

-(void)viewWillAppear:(BOOL)animated
{

    [self checkScore];

}

-(void)checkScore
{

}

- (IBAction)resetButtonClicked:(UIButton *)sender
{

}

#pragma mark - DetailQuestionViewControllerDelegate -
*-(void)questionsCorrectHasChangedTo:(int)questionNumberChanged*
{
    //set the textlabel text value to the number of questions correct
    NSLog(@"questionsNumberChanged is %i", questionNumberChanged);
    scoreLabel.text = [NSString stringWithFormat:@"You answered %d questions correctly",questionNumberChanged];
}

@end

何らかの理由でラベルが更新されることはありません。

質問を長くしてすみません、非常に具体的にしようとしました。

4

1 に答える 1

1

プロトコルメソッドの値を増やすことについて話しているので、ここで多少推測していますが、単一+または++どこにもありません...*サンプルコードの奇妙な場所にかなりの数が散らばっています。これらがタイプミスなのか、強調を意図したものなのか、ポインターの間接化を意図したものなのかは不明です。

クラスにプロパティがあるquestionsCorrectのでDetailQuestionViewController、これがカウンターを所有すると予想されるクラスであると仮定しましょう (これはモデル クラスではなくビューであることはスキップします...)。これがアイデアである場合、次の行:

    *questionsCorrect = 1;
    NSLog(@"questionsCorrect int is %d", questionsCorrect);
    [self.delegate questionsCorrectHasChangedTo:questionsCorrect];*

次のようにする必要があります。

    self.questionsCorrect++;  // increment the counter
    NSLog(@"questionsCorrect int is %d", self.questionsCorrect);
    [self.delegate questionsCorrectHasChangedTo:self.questionsCorrect];

(インスタンス変数questionsCorrectを自分で宣言し、上記の使用を削除することもできself.ます-どちらでもかまいません)

*上記のサンプルと同様にコード内にある場合は、extra の他のケースを調べて削除するだけで、目標に少し近づくことができます。

ScoreViewControllerまたは、カウンターを所有したい場合は、そこで宣言し、インクリメントして表示するメソッドを提供する必要があります。

HTH

于 2013-01-01T04:37:16.720 に答える