I’m trying to display an array of dictionaries variable in the table Cell Style 2 which is what the Contacts App uses to display the information of the contact.
For some reason the cell style does not show up.
The array variable “arrayOfDictionaries_E” which has the following setup.
/// Dictionary 1
NSArray *dataArray = [NSArray arrayWithObjects: @"Host", hostname, nil];
NSArray *keysArray = [NSArray arrayWithObjects: @"Label", @"Data", nil];
NSDictionary *host_dict = [[NSDictionary alloc] initWithObjects: dataArray forKeys: keysArray];
/// Dictionary 2
NSArray *dataArray2 = [NSArray arrayWithObjects: @"IP", hostIP, nil];
NSArray *keysArray2 = [NSArray arrayWithObjects: @"Label", @"Data", nil];
NSDictionary *ip_dict = [[NSDictionary alloc] initWithObjects: dataArray2 forKeys: keysArray2];
// Storage into Array of Dictionaries
NSArray *dictionariesArray = [[NSArray alloc] initWithObjects: host_dict, ip_dict, nil];
I have tested that the array contains the 2 dictionaries and both dictionaries are populated.
So I’m having trouble with:
First, I want the all cells to use CellStyle2.
Second, I want each dictionary to be created in a new section. (like the the Contacts App, selectively bundle groups of items together)
So here comes the code in my implementation file. It is a UIViewController adopting the 2 UITableView protocols.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return [arrayOfDictionaries_E count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
}
NSDictionary * dict = [arrayOfDictionaries_E objectAtIndex:indexPath.row];
cell.textLabel.text = [dict objectForKey:@"label"];
cell.detailTextLabel.text = [dict objectForKey:@"Data"];
return cell;
}
Find a screenshot of the current tableView here.
On the nib, I have linked the tableView outlet to the file’s Owner and done likewise for the delegate and source. I have changed the Style to Grouped.
However as seen on the image above, when I run the program the cell doesn’t display in the proper style specified also I don’t know how to get each row to display in separate sections. –> I’m think of an Array > Array > Dictionary variable, to get to work, however I’m quite lost at the fact of how this can be implemented.
I’m still relatively new to Objective-c, so you may need to explain with actual code implementations, to demonstrate how I may achieve this.
Thanks in advance to taking the time to answer this question.
There are 2 problems which I think could be in your way:
I’m not sure what you do expect to see in rows one and two, though.
OK, I’ve had another look at your question and you seem to be making things a bit more complicated than they need to be. You appear to have a host name and an IP address that you want to display in two cells within a section, with the same labels in each part of the section.
Why not just have a single array of dictionaries, holding the name and IP address, then in cellForRowAtIndexPath pick the dictionary based on the section number, then based on the row number display the relevant item from the dictionary, and hardcode the label at that point?
By the way, the reason your cell style does not appear is because you are passing nil for the label due to the issue mentioned above, so it appears to only have a single label.