我正在尝试存储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标签不会产生有趣的键......
我不记得有任何其他对象(任何语言)让实例知道其他人称之为什么,但我正在寻找创意。
谢谢。
答案 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];