0

I just started learning Xcode, read the book and now trying to implement what I read. The app needs to store certain data in arrays and dictionary, then table view extracts the data by automatically counting number of sections, number of rows and populating table cells with content, assigned to a key word.

Please, see my code, because I've been trying to run the app, but it gives me SIGABRT error. I don't know if new Xcode doesn't declare or call things this way(my book is for iOS3). I tried to find solutions from blogs, youtube, but the app is still not running at this point. I know that I declared everything correctly in AppDelegate files, etc, because I used someone's sample code of one 1 array. And the table view got populated.

Help me, because something is wrong with my code with NSMutableDictionary and indexPath. Thank you!

#import "TableViewController.h"


@implementation TableViewController
@synthesize tableData;
@synthesize tableSections;

#pragma mark - View lifecycle

- (void)viewDidLoad
{ [self createData];
[super viewDidLoad];
}
-(void)createData{

NSMutableArray *category1;
NSMutableArray *category2;

category1=[[NSMutableArray alloc] init];
category2=[[NSMutableArray alloc] init];

  tableSections=[[NSMutableArray alloc] initWithObjects:@"Category 1", @"Category 2", nil];   

tableData=[[NSMutableArray alloc] initWithObjects:category1, category2, nil];


[category1 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleA", @"name",@"A",@"property", nil]];
[category1 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleB", @"name",@"B",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleC", @"name",@"C",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc]
                               initWithObjectsAndKeys:@"TitleD", @"name",@"D",@"property", nil]];

}



#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [tableSections count];
//return [self.tableSections count];      Also tried to use with self. Don’t know which one is correct
}

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

- (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 = [[[tableData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"name"];


/* Also tried this:
tableData *cellObj = [[self.tableData objectAtIndex:indexPath.section]objectAtIndex:indexPath.row];
cell.textLabel.text = cellObj.name;   

/* Also tried this:
tableData *cellObj= [[[self.tableData objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]objectForKey:@"name"];
cell.textLabel.text=smsObj.name;   */


/* Also tried this:
NSDictionary *item = (NSDictionary *)[self.tableData objectAtIndex:indexPath.row];
cell.textLabel.text = [item objectForKey:@"name"];*/


/* Also tried this way:
NSDictionary *dictionary = [tableData objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"name"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.text = cellValue;    

And the same way, but switched order of NSArray and NSDictionary*/



return cell;
}


#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// This I will add later, after I make my Table View Controller work
}

@end

I know I'm doing something very silly with the codes, but I'm trying to understand the right way to write the codes...

4

1 回答 1

0

[category1 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleA", @"name",@"A",@"property", nil]]; [category1 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleB", @"name",@"B",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleC", @"name",@"C",@"property", nil]];

[category2 addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"TitleD", @"name",@"D",@"property", nil]];

}

add this code after initilization of those arrays and try

于 2012-02-08T06:59:51.687 回答