Objective c iOS:以编程方式添加不同的TableViewCell

Objective c iOS:以编程方式添加不同的TableViewCell,objective-c,ios4,uitableview,Objective C,Ios4,Uitableview,我想知道基于API中的数据创建行并将行添加到uitableview的最佳方法是什么。从API返回的数据如下所示。有些字段需要是标准文本,有些需要是密码文本字段,有些数字字段,有些是开关和日期选择器字段 我猜我需要在我的UITableView中添加一个字段,每个单元格中有一个字段,以便有单元格基础。然后根据我当时添加的单元格,我将检索该单元格并将其添加到表中 我如何跟踪数据?当用户提交信息时,我如何知道哪个字段是哪个 API返回的字段将取决于它们在我们的站点中启用的设置。而且顺序会根据他们设置的排

我想知道基于API中的数据创建行并将行添加到uitableview的最佳方法是什么。从API返回的数据如下所示。有些字段需要是标准文本,有些需要是密码文本字段,有些数字字段,有些是开关和日期选择器字段

我猜我需要在我的UITableView中添加一个字段,每个单元格中有一个字段,以便有单元格基础。然后根据我当时添加的单元格,我将检索该单元格并将其添加到表中

我如何跟踪数据?当用户提交信息时,我如何知道哪个字段是哪个

API返回的字段将取决于它们在我们的站点中启用的设置。而且顺序会根据他们设置的排序顺序而有所不同

"data": [
{
"field_name": "location_id",
"display_name": "Home Location",
"page_cust": "O",
"sort_order": "10"
},
{
"field_name": "first_name",
"display_name": "First Name1",
"page_cust": "R",
"sort_order": "20"
},
{
"field_name": "middle_name",
"display_name": "Middle Name",
"page_cust": "O",
"sort_order": "25"
},
{
"field_name": "last_name",
"display_name": "Last Name1",
"page_cust": "R",
"sort_order": "30"
},
{
"field_name": "address1",
"display_name": "Address",
"page_cust": "O",
"sort_order": "40"
},
{
"field_name": "address2",
"display_name": "Address 2",
"page_cust": "O",
"sort_order": "45"
},
{
"field_name": "city",
"display_name": "City",
"page_cust": "O",
"sort_order": "50"
},
{
"field_name": "state",
"display_name": "State",
"page_cust": "O",
"sort_order": "60"
},
{
"field_name": "zip",
"display_name": "Zip Code",
"page_cust": "O",
"sort_order": "70"
},
{
"field_name": "day_phone",
"display_name": "Daytime Phone",
"page_cust": "O",
"sort_order": "80"
},
{
"field_name": "night_phone",
"display_name": "Evening Phone",
"page_cust": "O",
"sort_order": "90"
},
{
"field_name": "cell_phone",
"display_name": "Cell Phone",
"page_cust": "O",
"sort_order": "100"
},
{
"field_name": "email",
"display_name": "eMail",
"page_cust": "O",
"sort_order": "110"
},
{
"field_name": "login",
"display_name": "Login",
"page_cust": "O",
"sort_order": "120"
},
{
"field_name": "password",
"display_name": "Password",
"page_cust": "O",
"sort_order": "130"
},
{
"field_name": "lead_id",
"display_name": "Heard Via?",
"page_cust": "O",
"sort_order": "140"
},
{
"field_name": "contact_okay",
"display_name": "Contact Okay",
"page_cust": "O",
"sort_order": "170"
},
{
"field_name": "call_okay",
"display_name": "Call Okay",
"page_cust": "O",
"sort_order": "180"
},
{
"field_name": "email_okay",
"display_name": "E-mail Okay",
"page_cust": "O",
"sort_order": "190"
},
{
"field_name": "mail_okay",
"display_name": "Mail Okay",
"page_cust": "O",
"sort_order": "200"
},
{
"field_name": "payment_type_id",
"display_name": "Payment Method",
"page_cust": "O",
"sort_order": "210"
},
{
"field_name": "employer",
"display_name": "Company",
"page_cust": "O",
"sort_order": "260"
},
{
"field_name": "occupation",
"display_name": "Occupation",
"page_cust": "O",
"sort_order": "270"
},
{
"field_name": "birth_date",
"display_name": "Birth Date",
"page_cust": "O",
"sort_order": "280"
},
{
"field_name": "gender",
"display_name": "Gender",
"page_cust": "O",
"sort_order": "290"
},
{
"field_name": "status_id",
"display_name": "Status",
"page_cust": "O",
"sort_order": "340"
},
{
"field_name": "allow_login",
"display_name": "Allow to Log In",
"page_cust": "O",
"sort_order": "350"
},
{
"field_name": "customer_type_id",
"display_name": "Customer Type",
"page_cust": "O",
"sort_order": "360"
},
{
"field_name": "rep_id",
"display_name": "Assigned To",
"page_cust": "O",
"sort_order": "370"
},
{
"field_name": "account",
"display_name": "Account Number",
"page_cust": "O",
"sort_order": "380"
},
{
"field_name": "needs",
"display_name": "Special Needs",
"page_cust": "O",
"sort_order": "390"
}
]

您正在使用web服务。根据用户设置,您将以特定顺序返回JSON响应,并由特定字段组成

您已经解析了JSON,并且得到了一个字典数组的一个键(
“data”
),对吗

最简单的方法是将这些字典存储在可变数组中,
NSMutableArray

您知道哪个单元格是哪个对象,因为数据源将被要求在特定的行号处使用该单元格。第0行的单元格将显示数组中第一个字典的字段,依此类推

NSDictionary *dictAtRow0 = [mySourceArray objectAtIndex:0];
如果您想知道如何知道字典中是否存在特定字段,请测试字典中是否存在相应的键,如下所示:

if([[dictAtRow0 allKeys] containsObject:@"field_name"]) {
    // here you know the dictionary has an entry for the key "field_name"
}
还可以根据“sort_order”键的值对数组内容重新排序。尽管web服务似乎尊重该顺序,但您可能希望以编程方式执行该操作。我建议在填充源阵列之前执行此操作:

// you parsed JSON and get the dictionary
NSArray *sortedArray = [[mainDict objectForKey:@"data"] sortedArrayUsingComparator: ^(id a, id b) {
    NSNumber *first = [NSNumber numberWithInteger:[[a objectForKey:@"sort_order"] integerValue]];
    NSNumber *second = [NSNumber numberWithInteger:[[b objectForKey:@"sort_order"] integerValue]];
    return [first compare:second];
}];
mySourceArray = [[NSMutableArray alloc] initWithArray:sortedArray];

我没有测试那段代码,比较器可能有问题,但你知道了。

不确定是否有人能回答这个问题,看起来你需要关于使用Web服务、解析json响应、操作数组、填充表视图的基础知识。@Vince我已经有了json解析。我需要知道用所需的单元格填充表格的最佳方法,并知道哪些单元格是哪些,因为它们可以是不同的顺序。由于您的应用程序以特定的顺序请求数据,请使用数组存储您的对象(这将保持该顺序)。我认为,任何进一步的重新排序都必须由你的应用程序来处理。它并没有按那个顺序请求。这是用户在其设置中设置的顺序。您是否建议,既然我是按顺序接收信息的,那么就创建一个数组,该数组的字段名与返回数据的索引相匹配,这样我就可以知道key->value,以便在输入完信息后发送回API?