我正在尝试设置一个充当表单的UITableView。每个单元格中都有一个UILabel和一个UITextField,因此一个单元格是:
Name <enter name>
^ ^
UILabel UITextField
现在,我正在尝试从NSDictionary(来自plist)填充UILabel和UITextField,它的组织如下:
Root Type Value
Name String
Address String
City String
etc
但是为了在cellForRowAtIndexPath方法中获得正确的标签和文本字段,我必须以数字方式引用字典。有没有办法做到这一点?
答案 0 :(得分:4)
不,因为NSDictionary中的元素没有排序。
您应该使用数组作为表视图数据源背后的模型。您可以轻松地为您的案例构建一个:
NSArray* myArray = [myDict allKeys];
当然,对于您的情况,需要特殊订单。所以你宁愿使用文字构建你的数组:
NSArray* myArray = [NSArray arrayWithObjects:@"Name", @"Address", @"City", nil];
答案 1 :(得分:2)
严格来说,没有。
我倾向于创建一个单独的NSArray密钥,这些密钥按顺序排列,以便按顺序排列。例如:
NSDictionary *values = ...
NSArray *keys = ....
for (NSString *key in keys) {
id value = [values objectForKey:key];
...
}
正如其他人所指出的那样,有必要使用有序列表(即NSArray
)来匹配UITableView
的工作方式。但是,这不一定是数据本身。当数据是NSDictionary或NSManagedObject时,在表单中编辑数据有一个常见的习惯用法,在iPhoneOS上几乎总是表示UITableView
。
在这种情况下,您可能不希望显示已编辑对象中的所有元素,您将希望显示字段的标题,并希望控制显示的顺序。所有这些都意味着这是一种有效(未混淆)的情况模式。
在这种特殊情况下,密钥可以从plist中获取,但是以一般方式提取它们虽然通过解析plist XML是可行的,但这并非易事。
答案 2 :(得分:2)
你应该将你的plist重组为一系列词典。字典键是您需要填充的元素和文本的值。按照希望它在屏幕上显示的顺序将每个字典添加到plist数组中。这实际上是Settings应用程序的工作方式。保存用户输入的文本非常简单。
你的plist看起来像:
<root>
<array>
<dict>
<key>labelText</key>
<value>Name</value>
<key>textFieldPromptText</key>
<value>enter name</value>
<key>textFieldText</key>
<value>name entered by user</value>
</dict>
<dict>
<key>labelText</key>
<value>Address</value>
<key>textFieldPromptText</key>
<value>enter street address</value>
<key>textFieldText</key>
<value>address entered by user</value>
</dict>
<dict>
<key>labelText</key>
<value>City</value>
<key>textFieldPromptText</key>
<value>enter city</value>
<key>textFieldText</key>
<value>city entered by user</value>
</dict>
.
.
.
</array>
</root>