How to remove data from an array comparing using string not an index in objective-C

48 Views Asked by At

I have an array of dictionary like below

    self->arrField: (
        {
        fieldname = "Have you ever had any one of the following:";
        fieldvalue =         (
            Diabetes,
            Hypertension
        );
        tagvalue = 0;
    },
        {
        fieldname = "By continuing with this survey, you agree to our terms of use and Parsons Information Governance and Privacy Policies, Procedures and Standards, available on the Corporate Policy Center.";
        fieldvalue = Agree;
        tagvalue = 1;
    },
        {
        fieldname = "Have you tested positive for COVID-19 in the last 10 days?";
        fieldvalue = No;
        tagvalue = 4;
    },
        {
        fieldname = "Do you have any known heart conditions or on any medications that elevate your heart rate";
        fieldvalue = Yes;
        tagvalue = 6;
    },
        {
        fieldname = "Have you received a COVID-19 test in the past 48 hours";
        fieldvalue = Yes;
        tagvalue = 7;
    },
        {
        fieldname = "In the last 48 hours have you experienced any of these symptoms";
        fieldvalue =         (
            cough,
            fever
        );
        tagvalue = 10;
    }
)  

So if the user changes any of the fieldvalue I need to replace that array, I have tried using replaceObjectAtIndex but it will not work out because I need compare the string.
Below is my implementation:

-(void)ChkUnChk:(UIButton*)sender {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIButton *btn=(UIButton *)sender;
        NSString *strValue = btn.accessibilityHint;
        NSString *Str=[NSString stringWithFormat:@"%d",(int)btn.tag];
        int iTag = [[sender.layer valueForKey:@"anyKey"] intValue];
        // new Implementation
        NSMutableDictionary *dictFields = [[NSMutableDictionary alloc] init];
        NSMutableArray *arrFieldvalue = [[NSMutableArray alloc] init];
        [dictFields setObject:[[self->dictCustomFieldGroups valueForKey:@"name"] objectAtIndex:iTag] forKey:@"fieldname"];
        [dictFields setObject:[NSString stringWithFormat:@"%ld",(long)iTag] forKey:@"tagvalue"];
        if ([self isTagIDAvailable:iTag]) {
            arrFieldvalue = [[[self->arrTempCheckboxFields objectAtIndex:self->checkboxIndex] valueForKey:@"fieldvalue"] mutableCopy];
            
            BOOL isTheObjectThere = [arrFieldvalue containsObject: strValue];
            if (isTheObjectThere) {
                NSLog(@"string contains");
                [btn setBackgroundImage:[UIImage systemImageNamed:@"square"] forState:UIControlStateNormal];
                for(id item in arrFieldvalue) {
                    if([item isEqual:strValue]) {
                        [arrFieldvalue removeObject:item];
                        [dictFields setObject:arrFieldvalue forKey:@"fieldvalue"];
                        break;
                    }
                }
            } else {
                NSLog(@"string does not contain!");
                [btn setBackgroundImage:[UIImage systemImageNamed:@"checkmark.square"] forState:UIControlStateNormal];
                [arrFieldvalue addObject:strValue];
                [dictFields setObject:arrFieldvalue forKey:@"fieldvalue"];
            }
            NSInteger count = [self->arrFields count];
            for (NSInteger index = (count - 1); index >= 0; index--) {
                NSArray *p = self->arrFields[index];
                if ([[self->arrFields valueForKey:@"tagvalue"] isEqual:[NSNumber numberWithInt:iTag]]) {
                    [self->arrFields removeObjectAtIndex:index];
                }
            }
            
             [self->arrFields replaceObjectAtIndex:iTag withObject:dictFields];
            [self->arrTempCheckboxFields replaceObjectAtIndex:self->checkboxIndex withObject:dictFields];
        } else {
            [btn setBackgroundImage:[UIImage systemImageNamed:@"checkmark.square"] forState:UIControlStateNormal];
            [arrFieldvalue addObject:strValue];
            [dictFields setObject:arrFieldvalue forKey:@"fieldvalue"];
            [self->arrFields addObject:dictFields];
            [self->arrTempCheckboxFields addObject:dictFields];
        }
        NSLog(@"self->arrField: %@",self->arrFields);
    });
}   
-(BOOL) isTagIDAvailable:(int)tagID {
    BOOL retVal = FALSE;
    BOOL tagIdFound = FALSE;
    if ([arrTagID count] > 0) {
        for (int i = 0; i < [arrTagID count]; i++) {
            if ([[NSNumber numberWithInteger:tagID] isEqualToNumber:[arrTagID objectAtIndex:i]]) {
                tagIdFound = TRUE;
                checkboxIndex = i;
                retVal = TRUE;
                break;
            }
        }
        if (!tagIdFound) {
            [arrTagID addObject:[NSNumber numberWithInteger:tagID]];
            checkboxIndex = (int)[arrTagID count];
            retVal = FALSE;
        }
    } else {
        [arrTagID addObject:[NSNumber numberWithInteger:tagID]];
        retVal = FALSE;
    }
    return retVal;
} 

I have done something from line no 32, like I will remove that array value and add it again.But I am not sure how to do that. If more detail require I can provide.

Thanks in Advance.

0

There are 0 best solutions below