开发者

best way to load/save disparate UITableView data for cellForRowAtIndexPath?

I have a multi-sectioin UITableView with different kinds of controls throughout various rows (multi-select checkboxes, single-select checkboxes, text inputs, text areas etc.). Each row could have a different data type (string, integer, date etc) and the number of rows and location are dynamic so you can't always depend on section X row Y being a certain control.

My question is what is the best way to save the data input into these fields for use in the view, grabbing the right data to show what was entered into that field when calling cellForRowAtIndexPath.

Note that I am NOT asking how to save this data persistently, I'm using CoreData for that, the question is just how to temporarily save the data while interacting with the view, so that you have it in an NSMutableArray or NSMutableDictiona开发者_JAVA技巧ry ready to be saved with CoreData when the user touches the "Save" button, or completely discarded if they press "Cancel".

Currently I'm trying to implement a dictionary but it seems somewhat kludgy and I often get one row's data showing up in another row.

Here is my current method for saving the form data. It's using a name from the arguments along with a counter variable used for the view as a whole. The counter variable is also used as the tag integer for the control.

-(id)documentField:(UIView *)view withKey:(NSString *)key andValue:(id)value{

    NSInteger foundTag = -1;

    NSLog(@"searching dictionary for key: %@", key);

    for(NSString *existingKey in fieldValues){

        NSArray *keyParts = [existingKey componentsSeparatedByString:@"~"];
        if( [[keyParts objectAtIndex:0] isEqualToString:key] )
        {
            foundTag = [[keyParts objectAtIndex:1] intValue];
            NSLog(@"found key: %@, it's tag is: %d", [keyParts objectAtIndex:0], foundTag);            
            break;

        }//end if
        else{
            //NSLog(@"no match: %@ != %@", (NSString *)[keyParts objectAtIndex:0], key);
        }

    }//end for


    //if we haven't tagged this element yet
    //set the tag
    if (foundTag == -1) {
        view.tag = fieldValueCounter;
        foundTag = fieldValueCounter;
        fieldValueCounter++;
    }//end if


    NSString *fieldKey = [NSString stringWithFormat:@"%@~%d", key, foundTag];
    if( ! [fieldValues objectForKey:fieldKey] ){
        [fieldValues setObject:((value)? value : @"") forKey:fieldKey];
    }


    NSLog(@"returning fieldValue: %@ = %@", fieldKey, [fieldValues objectForKey:fieldKey]);
    return [fieldValues objectForKey:fieldKey];

}//end documentField:withKey:andValue:

And here is how it is being used.

((UTVCellTextField *)cell).textLabel.text = @"Door Location:";
((UTVCellTextField *)cell).textField.text = [self documentField:((UTVCellTextField *)cell).textField withKey:@"door.door_location" andValue:door.door_location];
((UTVCellTextField *)cell).textField.delegate = self;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜