使用发件人的名称创建动态密钥

时间:2012-02-22 22:02:45

标签: objective-c ios

我正在尝试存储NSUserDefault信息,以跟踪一大堆UITextField对象中的所有值。

即使视图控制器知道这些文本字段的每个实例,我也试图避免为它们中的每一个创建一个键,例如:

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];

    NSString *curKey=[NSString string];
    if (textField == nameField) {
        curKey=@"nameField";
    }else if (textField == dateField){
        curKey=@"dateField";
    }else if (textField == cityField){
        curKey=@"cityField";
    }else if (textField == ageField){
        curKey=@"ageField";
    }else if (textField == colorField){
        curKey=@"colorField";
    }
    [[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:curKey];

    return YES;
}

是否无法确定动态创建密钥的实例名称是什么? 我还尝试使用IB的“用户定义的运行时属性”(作为myName)来使UITextField知道它的名字:

[[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:[textField valueForKey:@"myName"]];

使用int标签不会产生有趣的键......

我不记得有任何其他对象(任何语言)让实例知道其他人称之为什么,但我正在寻找创意。

谢谢。

1 个答案:

答案 0 :(得分:1)

基本上你有两个选择。

如果你有一个固定数量的textField,你应该为每个人创建一个属性(你可以通过界面构建​​器的插座连接它)并做

if (textField == self.nameField)

第二种方法类似,但对于大量文本字段/或动态数量的文本字段:

使用@"cityField"

等键将每个文本字段添加到字典中

使用NSString *key =[[dictionary allKeysForObject:textFiled] objectAtIndex:0];


许多其他类似方法也是可能的: 将键和文本字段保持在单独的数组中。使用

NSUInteger index =[fields indexForObject:textField];
NSString *key = [keys objectAtIndex:indey];