Je reçois un type d'erreur lors de la définition d'une valeur sur une propriété NSArray de mon code. Je vais vous envoyer du code et la sortie du débogueur.Objectif C: erreur de propriétés
@interface RootViewController : UITableViewController {
@private
NSArray* regioesArray;
// NSString *str;
// NSArray *ar;
}
@property(nonatomic, retain) NSArray *regioesArray;
@implementation RootViewController
@synthesize regioesArray;
//@synthesize str;
//@synthesize ar;
- (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
}
/*
Override if you support editing the list
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
}
if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
Override if you support conditional editing of the list
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
*/
/*
Override if you support rearranging the list
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/
/*
Override if you support conditional rearranging of the list
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
}
- (void)viewDidDisappear:(BOOL)animated {
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
- (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];
}
L'erreur est sur la ligne rootViewController.regioesArray = Regiões;
Je ne peux pas attribuer de valeur à cette propriété, même pas "néant".
Voici le 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'
Est-ce que quelqu'un sait ici ce qui pourrait arriver?
Comme demandé, voici la méthode « createRegions »:
- (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; }
Avez-vous essayé un "tout nettoyer" et recompilé? Parfois, les éléments de construction de xcode sont corrompus et ne parviennent pas à reconstruire un fichier. Il pourrait utiliser l'ancien code objet. Quoi qu'il en soit, juste quelque chose à essayer avant de faire quoi que ce soit d'autre. – Nimrod
Oui, je l'ai essayé ... mais pas d'accord ... –
pouvez-vous poster votre méthode createResions? –