2010-11-07 10 views
0

OK, je fais une application qui tire vers le bas les flux rss, la vue de la table initiale est les titres, la deuxième vue montre le détail de ce titre sélectionné par l'utilisateur.Impossible de définir la ligne sélectionnée pour l'application RSS dans l'iphone

Voici le code:

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

NewsDetailViewController *newsDetail = [[NewsDetailViewController alloc] initWithNibName:@"NewsDetailViewController" bundle:nil]; 
//NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
// ... 
// Pass the selected object to the new view controller. 
newsDetail.titleTextView.text = [[[self appDelegate] currentlySelectedBlogItem]title]; 
newsDetail.descriptionTextView.text = [[[self appDelegate] currentlySelectedBlogItem]description]; 
[self.navigationController pushViewController:newsDetail animated:YES]; 
[newsDetail release]; 

}

setCurrentlySelectedBlogItem est un pointeur vers blogrss classe qui est la référence dans le AppDelegate. Lorsque je clique sur la ligne du titre et qu'elle m'amène à la vue suivante, le contenu est vide. Dans les deux dernières lignes ci-dessus, j'essaie de définir les UILabel comme les détails du titre actuel ...

Quelqu'un peut-il deviner pourquoi cela se produit?

Aussi ceci est mon fichier AppDelegate.h:

#import <UIKit/UIKit.h> 
#import <CoreData/CoreData.h> 

@class RssFunViewController; 
@class NewsDetailViewController; 
@class RootViewController; 
@class BlogRss; 
@class BlogRssParser; 

@interface ExampleAppDelegate : NSObject <UIApplicationDelegate> { 

    UIWindow *window; 
    UINavigationController *navigationController; 
    RootViewController *viewController; 
    NewsDetailViewController * newsDetailController; 
    BlogRss * currentlySelectedBlogItem; 

@private 
    NSManagedObjectContext *managedObjectContext_; 
    NSManagedObjectModel *managedObjectModel_; 
    NSPersistentStoreCoordinator *persistentStoreCoordinator_; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet RootViewController *viewController; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet NewsDetailViewController * newsDetailController; 

@property (readwrite,retain) BlogRss * currentlySelectedBlogItem; 

@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; 
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; 
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

- (NSString *)applicationDocumentsDirectory; 
- (void)saveContext; 

@end 

Répondre

1

Les UILabels du contrôleur de vue sont probablement nul encore à ce moment-là et non accessible. Au lieu de définir les contrôles directement, créez deux propriétés NSString dans le NewsDetailViewController et définissez-les avant de le pousser. Ensuite, dans NewsDetailViewController, définissez les étiquettes sur les valeurs de propriété dans la méthode viewDidLoad (à quel point les étiquettes doivent être instanciées et accessibles).