匹配单击TableView行(字符串)以查找相应的唯一ID

时间:2015-04-22 15:20:58

标签: ios objective-c uitableview

我目前仍然坚持如何最好地查找并传递点击的表格视图行的ID。我想知道实现这一目标的最佳做法是什么。

  • 在iPhone故事板中,我想创建一个 tableview
  • 此表视图应从 JSON Web服务器响应中填充。
  • 此JSON对象将包含 10个项目,比如名称和
    地址加上唯一的ID。
  • 在我的tableview中,我希望在每个tableview行中都有一个名称 和地址,但我不想显示唯一的ID。

现在来了我的问题:如果我没有显示唯一ID,如何根据点击的哪一行再次找到此ID?有没有办法分配隐藏的字段?我希望通过POST 将唯一ID发送回网络服务器。

到目前为止,我一直在调查的方向是......

  • ...将JSON对象解析为NSDictionary,并将点击的tableview行匹配回来获取ID。
  • ...将JSON对象放入SQLlite数据库,并将点击的行与数据库匹配以获取ID。
  • ...不要执行上述任何操作,只需将一串名称和地址(而不是ID)发送回Web服务器,在那里将进行与数据库的匹配。

从单击的tableview行获取相应的ID方面,您认为最好的是什么?

非常感谢你的时间。

4 个答案:

答案 0 :(得分:1)

最简单实现此目的的方法是将您获得的对象存储到本地数组(或任何具有顺序并匹配表的显示顺序的内容)。从那里,您可以使用所选表格单元格的索引来确定选择了哪个对象并获取ID。

因此,如果您的Web服务中填充了一组sampleObject(每个名称,地址和ID)。使用此数组作为表的数据源。使用tableView:didSelectRowAtIndexPath:委托方法,如下所示......

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    int rowSelected = indexPath.row;
    id sampleObject = tableDataSource[rowSelected];  // Assuming tableDataSource is an array you created to populate the table
    // ...do whatever with the object that the user selected
}

答案 1 :(得分:1)

通常,您有一组模型对象,用于确定要向用户显示的UI元素数量。在简单的情况下,这可能只是NSArray,但也可以从Core Data或远程后端获取。

当表要求单元格时,使用indexPath在后​​备集合中查找相应的模型对象。然后,您可以使用对象中的信息来配置单元格。

当用户选择一行时,您可以使用报告的indexPath进行类似的查找。获得正确的对象后,您可以查找其ID并执行必要的网络请求。

答案 2 :(得分:1)

让我们分步进行。

  1. 开始下载JSON
  2. 将JSON数据保存在某些数组/字典中你喜欢什么,这里我将使用responseData作为我的集合的名称。
  3. 您的tableView行是responseData count。
  4. 在cellForRowAtIndexPath中的
  5. 只填充你需要的数据,地址名称,但你的responseData仍然有每个对象的id,对吗?
  6. 在didSelectRowForIndexPath中,你会得到像这样的
  7. 的id
      

    夫特

    resonseObject.objectAtIndex(indexPath.row).valueForKey(id)
    
      

    目标-C

    [[responseObject objectAtIndex:indexPath.row] valueForKey:@"id"]
    

    您还可以创建自定义UITableViewCell类并将ID作为String属性并将其设置在cellForRowForIndexPath中,但我认为第一种解决方案更好。

    问候。

答案 3 :(得分:1)

这就是你如何完成这个

调用您的网络服务并获取json。解析json并继续向NSMutableArray添加对象说itemList。

创建一个模型类,说Itemdesc,它有3个字段的名称,地址和ID。

解析json时,将每个单独的产品解析为上面定义的项目模型对象,并将其添加到itemList数组中。

可能是这样的:

NSArray *responseArray = responsefromService;
For(int i=0;i<responseArray.count;i++)      
    {
        //Parse your object here
        NSDictionary *currentItem = [responseArray objectAtIndex:i];
        Itemdesc *itemObject = [[Itemdesc alloc] init];
        itemObject.name = [currentItem objectForKey:@"name"];
        itemObject.address = [currentItem objectForKey:@"address"];
        itemObject.ID = [currentItem objectForKey:@"ID"];
        [itemList addObject:itemObject];
        itemObject=nil;
     }

现在将此数组作为对象传递给tableView以进行行计数,并在cellForRowAtIndexPath中获取您的行对象,如下所示:

Itemdesc *currentIndexObj = [itemList objectAtIndex:indexpath.row];
cell.name.text = currentIndexObj.name;
cell.address.text = currentIndexObj.address;

这将在tableViewCell中显示您的姓名和地址。

要在选择行时获取ID,请在didSelectRowAtIndexPath中编写以下代码:

Itemdesc *currentIndexObj = [itemList objectAtIndex:indexpath.row];
NSString *ID = currentIndexObj.ID;
NSLog(@"ID  value: %@", ID);

您已获得身份证,执行您想要执行的任何操作。

模型类只不过是一个普通的类本身。 用于创建模型类的代码:   转到文件 - &gt;新 - &gt;文件 - &gt; iOS-&gt;来源 - &gt; CocoaTouch类

选择next并给Class命名ItemDesc并使其成为NSObject的子类。在您的项目中,您将获得文件Itemdesc.h和Itemdesc.m

Itemdesc.h文件:

#import <Foundation/Foundation.h>

@interface Itemdesc : NSObject
@property(nonatomic,strong) NSString *name;
@property(nonatomic,strong) NSString *address;
@property(nonatomic,strong) NSString *itemID;

@end

无需在.m文件中进行任何更改。 而已。在您的类中导入表头,其中tableView存在且事情将起作用。

Json结构:

[
    { 
         "name" : "John", 
         "address" : "ny",
            "ID" : "xyz"
    },  
    {
            "name" : "Jane",
            "address" : "dc",
            "ID" : "pqr"
    } 
]