2011-06-13 4 views
0

Bonjour, j'essaie de créer une application ios simple avec des onglets et une navigation.Accéder aux données des délégués

dans le délégué j'ai le type:

BlogRss * _currentlySelectedBlogItem; 

avec cette propriété:

@property (readwrite,retain) BlogRss * currentlySelectedBlogItem; 

et je suis en train d'obtenir ses données avec deux autres classes, on est une vue de table avec les données et l'autre va montrer les données; dans les deux classes i ont déclaré ce qui suit:

@class NewsAppDelegate; 
NewsAppDelegate * _appDelegate; 
@property (nonatomic, retain) IBOutlet _NewsAppDelegate * appDelegate; 
@synthesize appDelegate = _appDelegate; 

ofter "toucher" la cellule dans la vue de la table, j'ai écrit ceci:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     [[self appDelegate] setCurrentlySelectedBlogItem:[[[self rssParser]rssItems]objectAtIndex:indexPath.row]]; 

    // Navigation logic may go here. Create and push another view controller. 
    // [[self appDelegate] loadNewsDetails]; 

    NewsDetailViewController *detailViewController = [[NewsDetailViewController alloc] initWithNibName:@"NewsDetailViewController" bundle:nil]; 

    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 

}

quand j'écris dans la autre classe:

NSLog(@"%@",self.appDelegate.currentlySelectedBlogItem); 

je reçois null.

clairement que je fais quelque chose de mal, mais je ne sais pas quoi ...

Répondre

0

Le problème est probable que cette ligne est de retour nulle:

[[[self rssParser]rssItems]objectAtIndex:indexPath.row] 
code

est plus facile de débogage lorsque vous ne nichent pas tant de phrases.

Vous pouvez accéder à votre délégué de n'importe où car UIApplication est un singleton, vous n'avez pas besoin de conserver une référence comme vous le faites avec self.appDelegate. Exemple:

(NewsAppDelegate *)[[UIApplication sharedApplication] delegate]; 

Ou tout simplement faire comme Jennis suggère, qui est plus rapide typer que moi, et retirez le IBOutlet. : P

Lorsque vous faites

NewsAppDelegate * _appDelegate; 
@property (nonatomic, retain) IBOutlet _NewsAppDelegate * appDelegate; 
@synthesize appDelegate = _appDelegate; 

Le résultat est le même si vous sautez la première ligne, parce que le temps d'exécution crée pour vous. Voir Question about @synthesize. Et je suppose que _NewsAppDelegate est vraiment NewsAppDelegate (pas de soulignement).

0

S'il vous plaît faire comme suit. Après la déclaration comme ci-dessus, vous aurez accès à appDelegate n'importe où dans votre contrôleur de vue.

Espérons que ça aide.

+0

merci! Je l'ai changé comme tu l'as dit et maintenant tout fonctionne très bien! – Janub

+0

@ user700230 Heureux que cela a fonctionné pour vous. S'il vous plaît accepter la réponse en cliquant sur le bon signe avec réponse ou upvote. Merci. –

Questions connexes