从文本字段中获取值并将它们存储在Objective-C中的字典中
Posted
技术标签:
【中文标题】从文本字段中获取值并将它们存储在Objective-C中的字典中【英文标题】:Get values from textfield and store them in dictionary in Objective - C 【发布时间】:2019-01-06 06:57:00 【问题描述】:我在tableviewcell
中有一个textfield
。单击按钮时,我想将文本字段中的值存储在字典中。
但是其中一个文本字段返回 nil,尽管其中有值。
NSString *sEmpty= [[NSString alloc] init];
for(int i = 0; i < 13; i++)
myProfileCell *cell = [_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
sEmpty = cell.tfProfileDetails.text;
if (sEmpty == nil)
sEmpty = @"";
NSString *str;
switch (i)
case 0:
str = @"first_name";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 1:
str = @"middle_name";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 2:
str = @"last_name";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 3:
str = @"profile";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 4:
str = @"email";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 5:
str = @"phone";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 6:
str = @"birth_date";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 7:
str = @"sex";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 8:
str = @"city";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 9:
str = @"bio";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 10:
str = @"address";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 11:
str = @"pincode";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
case 12:
str = @"bank_acc_type";
[_userDict setObject:sEmpty forKey:str];
sEmpty = nil;
break;
default:
break;
NSLog(@ "%@ ",_userDict);
当代码出现 case 11 (pincode) - 文本字段在 sEmpty 中存储 nil 值,但我在模拟器的所有文本字段中输入了值。 请建议我一些可能的结果,以便所有值都存储在字典中。
P.S - 如果文本字段中的值为空,则字典中的值将存储为空字符串
【问题讨论】:
您的整个方法都不正确。不要使用单元格来存储文本。不要迭代索引路径以获取所有单元格以获取每段文本。那永远行不通。一旦任何给定的文本字段不再是第一响应者,您就需要更新您的数据模型。 哦,你能通过代码告诉我正确的方法吗? @rmaddy 我同意@rmaddy。如果单元格超过给定数量,我什至不确定您的视图实现是否有效,因为当单元格消失(即当用户滚动表格视图时)然后重新出现时,我相当确定它的内容将为空跨度> 【参考方案1】:根据 Apple 的 cellForRowAtIndexPath: 文档。这个方法会返回
表示表格单元格的对象,如果单元格不可见或 indexPath 超出范围,则为 nil。
我猜,表格视图显示 11 个单元格,pincode
是第 12 个单元格,在屏幕上不可见。这使得cellForRowAtIndexPath:
为该索引路径处的单元格返回nil
,导致文本字段和sEmpty
是nil
。
为了解决这个问题,我建议将字符串保存在一个数组中。每当用户在文本字段上键入时,更新此索引处的字符串值。当你需要字符串时,从数组而不是单元格中获取
【讨论】:
我该如何克服这种情况?? 我没有足够的关于您的代码的信息来执行此操作。如我所见,您将_userDict
作为模型。您现在应该做的是在文本字段更改时更新_userDict
。
我想知道在更改文本字段时应该调用哪些方法
你应该在单元的类中实现一些逻辑。例如,您可能(例如)在textfieldDidEndEditing
被触发时发布通知,并在包含视图控制器中收听该通知。或者将视图控制器设置为单元格的委托,并从单元格调用委托方法(同样,当用户结束编辑文本字段时)。以上是关于从文本字段中获取值并将它们存储在Objective-C中的字典中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery 获取复选框的值并将它们吐到不同的表单字段中