Rafael Rodrigues
Rafael Rodrigues

Reputation: 9

Objective-C: Properties error when setting a value to a NSArray property

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

Answers (1)

brutella
brutella

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

Related Questions