Reputation: 9
I'm getting some kind of error when setting a value to a NSArray property of my code. I will send you de code and the debugger output.
@interface RootViewController : UITableViewController {
@private
NSArray* regioesArray;
}
@property(nonatomic, retain) NSArray *regioesArray;
@implementation RootViewController
@synthesize regioesArray;
- (void)viewDidLoad {
[super viewDidLoad];
//Set Title
self.title = @"Regiões";
self.regioesArray = nil;
}
- (void)viewDidUnload {
self.regioesArray = nil;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(section == 0 && self.regioesArray != nil){
return [regioesArray count];
} else {
return 0;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}
// Set up the cell
Zona *zona = (Zona *)[regioesArray objectAtIndex:indexPath.row];
cell.text = [zona nome];
[cell.contentView addSubview: [self getDetailDiscolosureIndicatorForIndexPath: indexPath]];
[zona release];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic
}
- (void)viewWillDisappear:(BOOL)animated {
}
- (void)viewDidDisappear:(BOOL)animated {
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)dealloc {
[super dealloc];
[regioesArray release];
}
- (UIButton *) getDetailDiscolosureIndicatorForIndexPath: (NSIndexPath *) indexPath
{
UIButton *button = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
button.frame = CGRectMake(320.0 - 44.0, 0.0, 44.0, 44.0);
[button addTarget:self action:@selector(detailDiscolosureIndicatorSelected:) forControlEvents:UIControlEventTouchUpInside];
return button;
}
- (void) detailDiscolosureIndicatorSelected: (UIButton *) sender
{
//
// Obtain a reference to the selected cell
//
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: [self.tableView indexPathForSelectedRow]];
//
// Do something like render a detailed view
//
/// ...
}
@end
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Create the navigation and view controllers
RootViewController *rootViewController = [[[RootViewController alloc] initWithStyle:UITableViewStylePlain] autorelease];
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.navigationController = aNavigationController;
NSArray * regioes = [self createRegions];
rootViewController.regioesArray = regioes;
[regioes release];
[rootViewController release];
[aNavigationController release];
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
The error is on the line rootViewController.regioesArray = regioes;
I can't ser any value o this property, not even "nil".
Here is the debug:
2010-10-16 01:35:43.965 TransitoRio[4224:207] *** -[RootViewController setRegioesArray:]: unrecognized selector sent to instance 0x1813ef0
2010-10-16 01:35:43.968 TransitoRio[4224:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[RootViewController setRegioesArray:]: unrecognized selector sent to instance 0x1813ef0'
What may be happening?
As asked, here is the "createRegions" method:
- (NSArray *)createRegions {
NSMutableArray *regioes = [[NSMutableArray alloc] init];
Zona *regiao = [[Zona alloc] init];
regiao.nome = @"Zona Sul";
[regioes addObject:regiao];
[regiao release];
regiao = [[Zona alloc] init];
regiao.nome = @"Zona Norte";
[regioes addObject:regiao];
[regiao release];
regiao = [[Zona alloc] init];
regiao.nome = @"Zona Oeste";
[regioes addObject:regiao];
[regiao release];
regiao = [[Zona alloc] init];
regiao.nome = @"Centro";
[regioes addObject:regiao];
[regiao release];
// Sort the regions.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"nome" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
NSArray *sortedRegions = [regioes sortedArrayUsingDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
[regioes release];
[sortedRegions retain];
return sortedRegions;
}
Upvotes: 0
Views: 361
Reputation: 1617
I see that you declared your array to be private in the header file, therefore you shouldn't access the property from outside of the class.
Upvotes: 1