0
votes

I have a program that connects to a MAMP server and selects my database and displays the contents in the Xcode simulator. Right now I have 2 tabs and the data is the same for both. I want the tabs to seperate the type of data to display in each tab. (1 tab should display types of wine grape and the other displays wine countries)

I think that I have to make a class (subclass of NSObject) that pulls the data, then another view controller with a mutable array that holds the data needed for each tab but HOW do I do this? How do I create a MutableArray?

Here the code in my TableViewController.m, which connects to my database using JSON:
- (void)viewDidLoad { [super viewDidLoad]; NSURL *url = [NSURL URLWithString:@"http://[localhost]:8888/wine.php"]; // Modify this to match your url.

NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url]; // Pulls the URL
NSLog(jsonreturn); // Look at the console and you can see what the restults are

NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSError *error = nil;

// In "real" code you should surround this with try and catch
NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
if (dict)
{
    rows = [[dict objectForKey:@"wine"] retain];


}
NSLog(@"Array: %@",rows);

[jsonreturn release];

}

Then I created another method for the tableview:

pragma mark - Table view data source

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

// Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}


// Configure the cell.
NSDictionary *dict = [rows objectAtIndex: indexPath.row];

//cell.textLabel.text = [dict objectForKey:@"id"];
//cell.textLabel.text = [dict objectForKey:@"wineColor"];
//cell.textLabel.text = [dict objectForKey:@"wineGrape"];
cell.textLabel.text = [dict objectForKey:@"wineCountry"];
cell.detailTextLabel.text = [dict objectForKey:@"id"];

return cell;

}

with this, the same data (the wine countries) is displayed in both Grape & Country tabs. How can I create a Mutable Array that will grab what data should be displayed in each tab?

1

1 Answers

0
votes

You need the second (Grape) view controller to implement the tableView datasource and delegate methods for its own tableview, but you don't need another array, you can use your JSON dictionary, but add the proper text to labels within your cells for grapes (in the cellForRowAtIndexPath UITableView datasource method). You would use the lines above that are currently commented out to populate your labels in cells of your "Grape" table view:

//cell.textLabel.text = [dict objectForKey:@"wineColor"];
//cell.textLabel.text = [dict objectForKey:@"wineGrape"];

You could add a custom UITableViewCell or use the subtitle style and set the subtitle to color.