2010-03-16 5 views
0

Je suis nouveau dans le développement d'applications iPhone. J'essaie de comprendre comment utiliser UITableView.iPhone: UITableView, Glisser le contenu de la table provoque un crash

Je suis écrit le code simple:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 1 ; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
    } 
cell.textLabel.text = @"Hello"; 
    return cell; 
} 

uitable affiche le contenu, mais si je suis le contenu de la table de glisser mon application se termine. Vous pouvez voir la vidéo: http://www.youtube.com/watch?v=TucTVJVhSD0

J'ai essayé de tout avec tableau:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return 1 ; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

return [hello count] ; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
    } 
cell.textLabel.text = [hello objectAtIndex:indexPath.row]; 
    return cell; 
} 



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
[tableView deselectRowAtIndexPath:indexPath animated:NO]; 
NSLog(@"Selected") ; 
} 



- (void) awakeFromNib 
{ 
hello = [[NSArray alloc] initWithObjects:@"hello", @"world", @"end", nil]; 
} 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

Le contenu est affiché et si je l'article sélection J'obtiens:

[Session started at 2010-03-16 19:21:48 +0200.] 
2010-03-16 19:21:52.295 ViewTest[1775:207] *** -[ViewTestViewController respondsToSelector:]: message sent to deallocated instance 0x3911ec0 

Je suis totale nouveau à la programmation iPhone. Et comme je vois tout ce que je fais - je viens de terminer l'application.

Répondre

1

Votre code de vue de table semble bien. Avez-vous implémenté d'autres méthodes de délégué dans le ViewTestViewController? Essayez d'exécuter l'application dans le débogueur.

Quand il se bloque, regardez la trace de la pile. Cela devrait donner un meilleur indice.

+0

Non, je n'implémente aucun protocole. Je viens de définir dataSource à mon ViewTestViewController dans IB. #import @interface ViewTestViewController: UIViewController { \t NSArray * bonjour; } @fin – kesrut

0

(1) Je pense que vous avez peut-être libéré votre instance de contrôleur de tableview et l'avez tué alors qu'il était encore utilisé de sorte que lorsque la vue de table envoie un de ses messages de délégué ou de source de données.

(2) Sinon, le message d'erreur indique que vous essayez d'envoyer le message respondsToSelector: à un exemple de ViewTestViewController quand vous devriez l'envoyer à la classe . (. -[ViewTestViewController respondsToSelector:] vs + [ViewTestViewController respondsToSelector:] le "-" et "+" faire toute la différence)

Donc, quelque part dans votre code, probablement votre délégué application, vous avez du code qui dit:

ViewTestViewController *myTableViewController= //..however you setup the controller 
[myTableViewController respondsToSelector:@selector(someMethod)]; 

. ..when vous devriez avoir ...

[ViewTestViewController respondsToSelector:@selector(someMethod)]; 

Je pense (1) le plus probable.

-1

Merci à tous. J'ai trouvé un problème. J'ai trouvé que je n'ai pas connecté viewController IBOutlet avec App Delegate. Mais pourquoi View a été montré?

@interface ViewTestAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    ViewTestViewController *viewController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet ViewTestViewController *viewController; 
Questions connexes