Reputation: 1191
I have a problem when set values on my UITableViewCell
.
I get this data from Web Service in JSON format, to do this created a class that contains all the data from JSON.
That is the Class.
Refunds.h
#import <Foundation/Foundation.h>
@interface Refunds : NSObject
-(id)initWithJSONData:(NSDictionary*)data;
@property (assign) NSNumber *refunds_id;
@property (assign) NSNumber *request_number;
@property (strong) NSString *policy_code;
@property (strong) NSString *company;
@end
Refunds.m
#import "Refunds.h"
@implementation Refunds
@synthesize refunds_id;
@synthesize request_number;
@synthesize policy_code;
@synthesize company;
-(id)initWithJSONData:(NSArray*)data{
self = [super init];
if(self){
NSLog(@"initWithJSONData method called ");
//NSString *u = [data valueForKey:@"policy_code"];
//NSLog(@"%@",u);
refunds_id = [data valueForKey:@"id"];
request_number = [data valueForKey:@"request_number"];
policy_code = [data valueForKey:@"policy_code"];
company = [data valueForKey:@"company"];
}
return self;
}
@end
In the ViewController where I use the UITableVIew
I have this implementation
NSMutableArray refunds_view = [[NSMutableArray alloc] init];
for (NSDictionary *each_refunds in self.list) {
Refunds *refunds = [[Refunds alloc] initWithJSONData:each_refunds];
[refunds_view addObject:refunds];
}
In the method
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{}
I have this:
Refunds *current = [refunds_view objectAtIndex:indexPath.row];
cell.date_admission.text = [current company];
In the line cell.date_admission.text = [current company]; gives me the following error
-[__NSArrayI length]: unrecognized selector sent to instance 0x8bc4eb0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x8bc4eb0'
That is the JSON Format.
[
{
"id": 1,
"holder_rut": 12345678,
"holder_name": "Otro Pedro",
"rut": 12345678,
"name": "Otro Pedro",
"refunds_view": [
{
"id": 60,
"request_number": 456789,
"policy_code": "3500009001",
"company": "Benefits",
"beneficiary_id": 1,
"concept": "Prueba More",
"date": "2014-05-21",
"amount": 20000,
"deductible_amount": 0,
"max_applied": 0,
"yearly_balance": 97,
"payment_amount": 14000,
"payment_method": "Deposito",
"bank": "Estado",
"account_number": "1234567",
"payment_date": "2014-06-20",
"created_at": "2014-06-18 21:55:41"
}
]
}
The data I need to show is that this refunds_view
View Controller Code
//UITableView Methods Implemented
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *simpleTableIdentifier = @"SimpleCell";
RowCell *cell = (RowCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
//inicilitacion cell custom
cell = [[RowCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
Refunds *current = [refunds_view objectAtIndex:indexPath.row];
NSLog(@"company %@",[current company]);
cell.date_admission.text = [current company];
return cell;
}
ViewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//Geting data from JSON Refunds
SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];
NSDictionary *dict = [NSDictionary
dictionaryWithObjects:[NSArray arrayWithObjects:rut_user, nil]
forKeys:[NSArray arrayWithObjects:@"rut", nil]];
NSData *jsonData = [jsonWriter dataWithObject:dict];
//URL
NSURL *url = [NSURL URLWithString:@"URL"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
//[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:token forHTTPHeaderField:@"X-Auth-Token"];//TOKEN
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: jsonData];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"Response code: %d", [response statusCode]);
NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonResponse = (NSDictionary *) [jsonParser objectWithString:responseData error:nil];//I'm a Json Refunds
self.list = [jsonResponse valueForKey:@"refunds_view"];
NSLog(@"Quantity of Refunds Founds %i",[self.list count]);
refunds_view = [[NSMutableArray alloc] init];
for (NSDictionary *each_refunds in self.list) {
//NSLog(@"each_refound %@",each_refunds);
Refunds *refunds = [[Refunds alloc] initWithJSONData:each_refunds];
[refunds_view addObject:refunds];
}
}
I need Fix it ASAP. Thanks. Best Regards.
Hi everyone. I try this
NSLog(@"%@",[current company]);
2014-06-26 10:32:13.917 Benefits[7178:70b] (
Benefits
)
cell.sol_number.text = [NSString stringWithFormat:@"%@", current.company];
no occurs the error But the value doesn't show complete, only show (
Any idea for this. Thanks.
Upvotes: 2
Views: 135
Reputation: 14118
The problem is in your method definition in .mm file, instead of NSDictionary you have used NSArray in method parameters. Other than that your code and logic is fine.
Refunds.h
#import <Foundation/Foundation.h>
@interface Refunds : NSObject
-(id)initWithJSONData:(NSDictionary*)data;
Whereas in Refunds.mm file
#import "Refunds.h"
@implementation Refunds
-(id)initWithJSONData:(NSArray*)data{ ... }
I would suggest, always try to do copy-paste to avoid such human errors.
Upvotes: 1
Reputation: 768
cell.date_admission.text = [[current objectAtIndex:0] company];
Upvotes: 0
Reputation: 2693
Rewrite your Refund.m like below
#import "Refunds.h"
@implementation Refunds
@synthesize refunds_id;
@synthesize request_number;
@synthesize policy_code;
@synthesize company;
-(id)initWithJSONData:(NSDictionary*)data
{
self = [super init];
if(self)
{
NSLog(@"initWithJSONData method called ");
refunds_id = data[@"id"];
request_number = data[@"request_number"];
policy_code = data[@"policy_code"];
company = data[@"company"];
}
return self;
}
@end
Upvotes: 2