Mike Owens
Mike Owens

Reputation: 936

separate JSON to uitableview sections

I have some JSON data that I am getting from my database. I can pull it fine and load it into my table view. my issue is separating my JSON data so I can section the tableview.

JSON

[{"id":"1","name":"steve mans","phoneNumber":"(559)123-4455","showNumber":"1","greenCard":"1","expiration":"2014-02-15","driver":"1","paid":"1","watch":"1"},
{"id":"2","name":"myself and me","phoneNumber":"(559)321-6784","showNumber":"1","greenCard":"1","expiration":"2013-10-18","driver":"0","paid":"0","watch":"2"},
{"id":"4","name":"tod bellesmithson","phoneNumber":"(559)678-3421","showNumber":"0","greenCard":"1","expiration":"2013-11-22","driver":"1","paid":"0","watch":"2"},
{"id":"3","name":"John Smith","phoneNumber":"(559)123-1234","showNumber":"1","greenCard":"0","expiration":"2013-10-08","driver":"0","paid":"1","watch":"3"},
{"id":"5","name":"greg smith","phoneNumber":"559 345-1234","showNumber":"1","greenCard":"1","expiration":"2013-10-08","driver":"0","paid":"1","watch":"3"}]

What I am trying to do is, separate this data into three sections in my tableview. So I thought create three different tables and load each table into a different section of the tableview. But the information is the same in each one (id, name, phone etc.) So I ended up with one table and added a column that designates what shift people work, 'watch'. So how do I separate the data by using the watch column, so in my tableview i will have:

section one people who work night shift section two people who work morning section three night shift

Upvotes: 0

Views: 665

Answers (3)

Parab
Parab

Reputation: 29

check for section in your cellForRowAtIndexPath method and load data accordingly,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath    

{

//initialize cell

if (indexPath.section == 0){

// load data
}

return cell;
}

Upvotes: 1

Rocker
Rocker

Reputation: 1269

try this

    NSMutableArray *tableData = [NSMutableArray alloc] init];
    NSArray* nameArr = [NSArray arrayWithObjects: @"1", @"2",@"3",nil];
    for(int i=0; i<[nameArr count]; i++)
    {
         [tableData addObject:[jsonArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"watch = %@",[nameArr objectAtIndex:i]]] ];
    }

TableView Delegate Methods

 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  {
     return [tableData count];
  } 

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

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 {
      UITableViewCell *cell= nil;
     //implement your logic to display the cell item;
     NSArray sectionData = [tableData objectAtIndex:indexPath.section];
     NSArray rowData = [sectionData objectAtIndex:indexPath.row];       

     return cell;   
 }

Please note i have not compiled the code. There is a chance of compilation error.

Upvotes: 1

Abhinav
Abhinav

Reputation: 38162

Try with this code:

NSArray *data = (NSArray)[NSJSONSerialization JSONObjectWithData:jsonData 
                                             options:NSJSONReadingMutableContainers 
                                               error:&error];

NSMutableArray *morningShift = [NSMutableArray array];
NSMutableArray *noonShift = [NSMutableArray array];
NSMutableArray *nightShift = [NSMutableArray array];


for (int i=0; i< [data count]; i++)
{
   NSDictionary *item = data[i];

   if (@"1" == item[@"watch"] )
  {
    [morningShift addObject:item];
  } else if (@"2" == item[@"watch"] )
  {
    [noonShift addObject:item];
  } else if (@"3" == item[@"watch"] )
  {
    [nightShift addObject:item];
  } 
}

Upvotes: 1

Related Questions