Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change a Property for All Objects in an NSMutableArray

I have an NSMutableArray with 9 objects. Those objects have many properties, like questionName, questionWhatRow, etc.

I want to be able to change one of those properties for All of the objects in the NSMutableArray.

Here is my NSMutableArray Class.

-(id) init
{
    self = [super init];
    
    if (self)
    {
        self.questionsArray = [[NSMutableArray alloc] init];
        
        Question *newQuestion = [[Question alloc] init];
        newQuestion.questionName = @"What is the name of the girl who has to fetch water for her family every day?";
        newQuestion.questionRowName = @"Question 1";
        newQuestion.questionAnswer = @"Nya";
        newQuestion.questionHint = @"Maybe if you read the book you would know";
        newQuestion.questionWhatRow = @"Nya";
        newQuestion.questionCompleteOrNot = @"No";
        newQuestion.pointForQuestion = 1;
        [self.questionsArray addObject:newQuestion];
        
        newQuestion = [[Question alloc] init];
        newQuestion.questionName = @"What is Nya's sister's name?";
        newQuestion.questionRowName = @"Question 2";
        newQuestion.questionAnswer = @"Akeer";
        newQuestion.questionHint = @"Maybe if you read the book you would know";
        newQuestion.questionWhatRow = @"Nya";
        newQuestion.questionCompleteOrNot = @"No";
        newQuestion.pointForQuestion = 1;
        [self.questionsArray addObject:newQuestion];
        
        newQuestion = [[Question alloc] init];
        newQuestion.questionName = @"What people is Nya's mother scared of when her father and sons go hunting?";
        newQuestion.questionRowName = @"Question 3";
        newQuestion.questionAnswer = @"Dinka";
        newQuestion.questionHint = @"Maybe if you read the book you would know";
        newQuestion.questionWhatRow = @"Nya";
        newQuestion.questionCompleteOrNot = @"No";
        newQuestion.pointForQuestion = 1;
        [self.questionsArray addObject:newQuestion];
        
        newQuestion = [[Question alloc] init];
        newQuestion.questionName = @"What is Salva scared of when he is in the Akobo desert?";
        newQuestion.questionRowName = @"Question 4";
        newQuestion.questionAnswer = @"Lions";
        newQuestion.questionHint = @"He is scared of an animal because it ate his friend Marial";

        
        newQuestion = nil;
                
    }
    
    return self;
}

-(NSUInteger)count
{
    return questionsArray.count;
}


- (Question *)questionAtIndex:(NSUInteger)index
{
    return [questionsArray objectAtIndex:index];
}

Now, I have another class called ScoreViewController, and I want to be able to change the property, questionCompleteOrNot of the NSMutableArray questionsArray for all objects/questions to @"No".

My ScoreView has a button to Reset, but I don't know what to put in it to change all questionCompleteOrNot properties of the questionsArray to @"No".

Sorry for the long question, I was trying to be very specific.

Edit

Here is my DetailView for a tableView.

if ([[selectedQuestion questionCompleteOrNot] isEqualToString:@"No"])
    {
        if ([[selectedQuestion questionAnswer] caseInsensitiveCompare:answerField.text] == NSOrderedSame)
        {
            // Show the  correct label
            [correctLabel setHidden:NO];
            correctLabel.text = @"Correct!";
            correctLabel.textColor = [UIColor greenColor];

        }
        else
        {
            // Show the incorrect label
            [correctLabel setHidden:NO];
            correctLabel.text = @"Incorrect";
            correctLabel.textColor = [UIColor redColor];
            [incorrectPlayer play];
            [[selectedQuestion questionCompleteOrNot] isEqualToString:@"Yes"];
            
        }
        
        // Erase the text in the answerField
        answerField.text = @"";
    }
    if ([[selectedQuestion questionCompleteOrNot] isEqualToString:@"Yes"])
    {
        UIAlertView *error = [[UIAlertView alloc]
                              initWithTitle:@"Error"
                              message:@"You already answered this question. Please click the reset button on the score view to restart."
                              delegate:self
                              cancelButtonTitle:@"Okay!"
                              otherButtonTitles:nil];
        
        [error show];
        answerField.text = @"";
    }
    
    selectedQuestion.questionCompleteOrNot = @"Yes";
    correctLabel.text = @"";
    NSLog(@"Selected question's questionCompleteOrNot is %@", [selectedQuestion questionCompleteOrNot]);
like image 552
jakife Avatar asked Dec 31 '12 21:12

jakife


1 Answers

You can use NSArray's makeObjectsPerformSelector:withObject:, like so:

[questionsArray makeObjectsPerformSelector:@selector(setQuestionCompleteOrNot:) withObject:@"No"];
like image 186
Alexis King Avatar answered Sep 30 '22 16:09

Alexis King