Ошибка новичка?
Я работаю над приложением для викторин, которое использует результаты ответов из контроллера представлений, создает объекты NSMutableArray для значений totalCorrect и totalTried в файле .m модели KeepScore, и модель возвращает оценку обратно в мой контроллер представления. Затем контроллер представления обновляет мою метку счета в моем представлении. Затем я использую UINavigationController, чтобы перейти к следующему контроллеру представления, а затем жду, когда пользователь введет ответ на следующий вопрос викторины. Проблема заключается в том, что в следующий раз, когда я вызову свой файл .m модели KeepScore из моего контроллера представления 2, объекты NSMutableArray в модели KeepScore .m вернутся к нулевым значениям. Я удостоверился, что мои значения объекта NSMutableArray были правильными (не нулевыми) прямо перед возвратом из моей модели KeepScore .m к моему контроллеру представления 1. Я работаю iOS 5.1 с Xcode 4.3.1 с ARC. Мое свойство NSMutableArray в моем личном объявлении API в файле модели .m является сильным. Разве модель KeepScore .m не должна сохранять значения моего массива, когда я возвращаюсь в свой контроллер представления, чтобы я мог использовать их снова, когда я вызываю свою модель из моего следующего контроллера представления? Сначала я хотел спросить в формулировке, чтобы увидеть, поймал ли кто-нибудь какую-нибудь глупую логику, которая у меня есть. Я напишу код, если полезно.
Вот моя модель KeepScore.h
#import
@interface KeepScore : NSObject
- (float)score:(BOOL)questionCorrect:(BOOL)questionTotal:(BOOL)firstScoringPass;
@end
Вот моя реализация KeepScore.m модели:
#import "KeepScore.h"
@interface KeepScore()
@property (nonatomic, strong) NSMutableArray *correctScoreValues;
@end
@implementation KeepScore
@synthesize correctScoreValues = _correctScoreValues;
- (NSMutableArray *)correctScoreValues
{
if (_correctScoreValues == nil) _correctScoreValues = [[NSMutableArray alloc] init];
return _correctScoreValues;
}
- (float)score:(BOOL)questionCorrect:(BOOL)questionTotal:(BOOL)firstScoringPass {
int totalTried;
int totalCorrect;
NSLog(@"firstScoringPass = %@", firstScoringPass ? @"YES" : @"NO");
NSLog(@"questionCorrect = %@", questionCorrect ? @"YES" : @"NO");
NSLog(@"questionTotal = %@", questionTotal ? @"YES" : @"NO");
if (firstScoringPass) {
int totalTriedInt = 0;
int totalCorrectInt = 0;
NSNumber *correct = [NSNumber numberWithInt:totalCorrectInt];
NSNumber *tried = [NSNumber numberWithInt:totalTriedInt];
[self.correctScoreValues addObject:correct];
[self.correctScoreValues addObject:tried];
firstScoringPass = NO;
}
if (questionCorrect) {
totalCorrect = ([[self.correctScoreValues objectAtIndex:0] intValue] + 1);
NSLog(@"totalCorrect = %d", totalCorrect);
NSNumber *correct = [NSNumber numberWithInt:totalCorrect];
NSLog(@"correct = %@", correct);
[self.correctScoreValues replaceObjectAtIndex:0 withObject:correct];
NSLog(@"correct value in array = %d",[[self.correctScoreValues objectAtIndex:0] intValue]);
} else {
totalCorrect = [[self.correctScoreValues objectAtIndex:0] intValue];
}
NSLog(@"totalCorrect = %d", totalCorrect);
if (questionTotal) {
NSLog(@"tried value in array = %d", [[self.correctScoreValues objectAtIndex:1] intValue]);
totalTried = ([[self.correctScoreValues objectAtIndex:1] intValue] + 1);
NSNumber *tried = [NSNumber numberWithInt:totalTried];
[self.correctScoreValues replaceObjectAtIndex:1 withObject:tried];
NSLog(@"tried value in array = %d", [[self.correctScoreValues objectAtIndex:1] intValue]);
}
float score = (totalCorrect/totalTried);
NSLog(@"score = %0.2f", score);
NSLog(@"totalCorrect = %d, totalTried = %d", totalCorrect, totalTried);
NSLog(@"correct value in array = %d", [[self.correctScoreValues objectAtIndex:0] intValue]);
NSLog(@"tried value in array = %d", [[self.correctScoreValues objectAtIndex:1] intValue]);
return score;
}
@end
Вот один из моих файлов ViewControllers .m:
#import "MapQuizViewController.h"
#import "KeepScore.h"
@interface MapQuizViewController()
@property (nonatomic, strong) KeepScore *scoreModel;
@property (nonatomic) BOOL questionTotal;
@property (nonatomic) BOOL questionCorrect;
@property (nonatomic) BOOL firstScoringPass;
@end
@implementation MapQuizViewController
@synthesize gradeLabel = _gradeLabel;
@synthesize scoreLabel = _scoreLabel;
@synthesize scoreModel = _scoreModel;
@synthesize questionTotal = _questionTotal;
@synthesize questionCorrect = _questionCorrect;
@synthesize firstScoringPass = _firstScoringPass;
- (KeepScore *)scoreModel;
{
if (!_scoreModel) _scoreModel = [[KeepScore alloc] init];
return _scoreModel;
}
- (IBAction)answerButtonPressed:(UIButton *)sender
{
NSString *answerChoice = sender.currentTitle;
NSString *correct = [NSString stringWithFormat:@"Correct!"];
NSString *incorrect = [NSString stringWithFormat:@"Incorrect"];
self.questionTotal = YES;
self.firstScoringPass = YES;
if ([answerChoice isEqualToString:@"Australia"]) {
self.gradeLabel.textColor = [UIColor blueColor];
self.gradeLabel.text = [NSString stringWithFormat:@"%@",correct];
self.questionCorrect = YES;
self.scoreLabel.text = [NSString stringWithFormat:@"%0.2f",[self.scoreModel score:_questionCorrect :_questionTotal :_firstScoringPass]];
} else if ([answerChoice isEqualToString:@"U.S."]) {
self.gradeLabel.textColor = [UIColor redColor];
self.gradeLabel.text = [NSString stringWithFormat:@"%@", incorrect];
self.questionCorrect = NO;
self.scoreLabel.text = [NSString stringWithFormat:@"%0.2f",[self.scoreModel score:_questionCorrect :_questionTotal :_firstScoringPass]];
} else if ([answerChoice isEqualToString:@"China"]) {
self.gradeLabel.textColor = [UIColor redColor];
self.gradeLabel.text = [NSString stringWithFormat:@"%@", incorrect];
self.questionCorrect = NO;
self.scoreLabel.text = [NSString stringWithFormat:@"%0.2f",[self.scoreModel score:_questionCorrect :_questionTotal :_firstScoringPass]];
}
}
- (void)viewDidUnload {
[self setScoreLabel:nil];
[super viewDidUnload];
}
@end