如何在UITableviewCell中显示Json数据

时间:2013-10-15 10:05:50

标签: iphone ios objective-c json

我目前正致力于JSON。我只是使用jsp webserver。并且使用JSON数据我希望在我的uitableviewcell中显示。我尝试了一些程序。但是我遇到了一些错误。

这是我的JSON

[{"result":[{"request_id":508,"ticket_number":"PA_1000508","email":"harI","user_id":6,"description":"Feed","createdTime":"10/15/2013 10:52:32 AM","status":"initiated"},{"request_id":507,"ticket_number":"PA_1000507","email":"hari","user_id":6,"description":"","createdTime":"10/15/2013 10:52:16 AM","status":"initiated"},{"request_id":505,"ticket_number":"PA_1000505","email":"hari","user_id":6,"description":"test","createdTime":"10/15/2013 10:42:26 AM","status":"initiated"},{"request_id":504,"ticket_number":"PA_1000504","email":"hari","user_id":6,"description":"desccccccccccccccccccc","createdTime":"10/15/2013 10:42:06 AM","status":"initiated"},

我想在uitableviewcell

中显示数据

这是我的示例代码。

TotalRequest.h

@interface TotalRequests : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
    NSMutableData *data;
    NSArray *listItems;
    NSURLConnection *connection;
    NSString *stat;
    IBOutlet UITableView *tableview;
}

TotalRequest.m

- (void)viewDidLoad
{

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.title=@"Total Requests";
    NSURL *url=[NSURL URLWithString:@"http:sampleurl"];
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
    if(connection)    
    {
        data=[[NSMutableData alloc]init];
    }
    data=[[NSMutableData alloc]init];
    [self performSelectorOnMainThread:@selector(fetchData) 
    withObject:data waitUntilDone:YES];
}

-(void)fetchData:(NSData *)responseData
{
    NSError *error=nil;
    NSDictionary *json=[NSJSONSerialization JSONObjectWithData:responseData 
    options:kNilOptions error:&error];
    NSDictionary *tRequest=[json objectForKey:@"userId"];
    NSLog(@"Total Requests :%@",tRequest);
    if(!tRequest)
    {
        NSLog(@"Error In Json :%@",error);
    }
    else
    for(NSDictionary *newValue in tRequest)
    {
        NSString *tNumber=[newValue objectForKey:@"ticket_number"];
        NSString *time=[newValue objectForKey:@"createdTime"];
        stat=[newValue objectForKey:@"status"];
        NSLog(@"ticket_number :%@",tNumber);
        NSLog(@"createdTime :%@",time);
        NSLog(@"status :%@",stat);
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    cell.textLabel.text=[[listItems objectAtIndex:indexPath.row]objectForKey:@"ticket_number"];
    cell.textLabel.text=[[listItems objectAtIndex:indexPath.row]objectForKey:@"createdTime"];
    cell.textLabel.text=[[listItems objectAtIndex:indexPath.row]objectForKey:@"status"];
    return cell;
}


-(void)connection :(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    data=[[NSMutableData alloc]init];
}


-(void)connection : (NSURLConnection *)connection didReceiveData:(NSData *)theData
{
    [data appendData:theData];
}

-(void)connection :(NSURLConnection *)connection didFailWithError:(NSError *)error

{
    NSLog(@"Error in Connection");
}

错误消息是:

-[TotalRequests fetchData]: unrecognized selector sent to instance 0x7162820 15:02:36.685 sampleWebservices[2897:11303]Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TotalRequests fetchData]: unrecognized selector sent to instance 0x7162820' *** First throw call stack: (0x1c99012 0x10d6e7e 0x1d244bd 0x1c88bbc 0x1c8894e 0xb15fb4 0xb15e67 0x3d45 0xfc1c7 0xfc232 0xfc4da 0x1138e5 0x1139cb 0x113c76 0x113d71 0x11489b 0x114e93 0x114a88 0x3607 0xca285 0xca4ed 0xad45b3 0x1c58376 0x1c57e06 0x1c3fa82 0x1c3ef44 0x1c3ee1b 0x1bf37e3 0x1bf3668 0x1affc 0x28bd 0x27e5)

1 个答案:

答案 0 :(得分:3)

在TotalRequest.m中替换您的代码:

[self performSelectorOnMainThread:@selector(fetchData) withObject:data waitUntilDone:YES];

用这个:

[self performSelectorOnMainThread:@selector(fetchData:) withObject:data waitUntilDone:YES];

请注意,我在选择器(fetchData)中添加了“:”

当您使用performSelector方法并且您的方法接收参数时,您必须在方法名称中添加“:”。

修改

解决第一个问题后,现在出现第二个问题。在您的接口声明中,您声明实现了UITableViewDataSource。如果您查看apple的文档(https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html),您会看到有两种必需的方法: - tableView:cellForRowAtIndexPath:必需的方法 - tableView:numberOfRowsInSection:required method

您实施了第一个,但不是第二个。这是一个方法,告诉tableView一节中将有多少行。我看到你的数据模型是“listItems”,所以你应该将这段代码添加到你的TotalRequest.m文件中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [listItems count];
}

我在考虑你只有一节。如果您有不同的需求,请调整此方法的逻辑。