2010-11-13 12 views
0

J'ai un peu de code à l'intérieur RootViewController.m:valeur de passage iphone à autre classe

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
BlogRssParser *blogRss = [[BlogRssParser alloc] init]; 
blogRss.terms = [[selectedObject valueForKey:@"data"] description]; 
//[blogRss setSelectedObject:selectedObject]; 
NSLog(@"%@", blogRss.terms); 

RssFunViewController *rssFun = [[RssFunViewController alloc] initWithNibName:@"RssFunViewController" bundle:nil]; 
[self.navigationController pushViewController:rssFun animated:YES]; 
[rssFun release]; 

}

Ainsi, lorsque l'utilisateur clique sur la ligne, il va RssFunViewController. Mais il utilise BlogRssParser pour remplir la tableview de RssFun. Donc, j'essaie d'obtenir entre cela et envoyer une valeur de RootView à BlogRss afin qu'il remplisse RssFun avec les bonnes données.

i ont ceci en BlogRssParser.m:

-(BOOL)fetchAndParseRss{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

    //To suppress the leak in NSXMLParser 
    [[NSURLCache sharedURLCache] setMemoryCapacity:0]; 
    [[NSURLCache sharedURLCache] setDiskCapacity:0]; 

    NSLog(@"%@", self.terms); 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://news.search.yahoo.com/rss?ei=UTF-8&p=%@&fr=news-us-ss", self.terms]]; 
    NSLog(@"%@", url); 

    BOOL success = NO; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
    [parser setDelegate:self]; 
    [parser setShouldProcessNamespaces:YES]; 
    [parser setShouldReportNamespacePrefixes:YES]; 
    [parser setShouldResolveExternalEntities:NO]; 
    success = [parser parse]; 
    [parser release]; 
    [pool drain]; 
    return success; 
} 

Dans la console, le journal des termes RootView a la bonne valeur. Mais dans BlogRssParser, il apparaît comme (null). J'ai déclaré des termes en tant que propriété dans BlogRssParser.m.

Voici comment je l'a déclaré:

@interface BlogRssParser : NSObject { 
    BlogRss * _currentItem; 
    NSMutableString * _currentItemValue; 
    NSMutableArray * _rssItems; 
    id<BlogRssParserDelegate> _delegate; 
    NSOperationQueue *_retrieverQueue; 
    //NSManagedObject *selectedObject; 
    NSString *terms; 
} 


@property(nonatomic, retain) BlogRss * currentItem; 
@property(nonatomic, retain) NSMutableString * currentItemValue; 
@property(readonly) NSMutableArray * rssItems; 
//@property(nonatomic,retain) NSManagedObject *selectedObject; 
@property(nonatomic, retain) NSString *terms; 

@property(nonatomic, assign) id<BlogRssParserDelegate> delegate; 
@property(nonatomic, retain) NSOperationQueue *retrieverQueue; 

Répondre

0

Utilisez self.terms à la place. Vous ne devriez pas utiliser le ivar sous-jacent à l'intérieur des méthodes accesseur.

+0

J'ai essayé cela dans BlogRssParser, ne fonctionne toujours pas, vouliez-vous dire ailleurs? – benhowdle89

+0

Hmm. De quelle méthode est le deuxième extrait de code? –

+0

je vais mettre plus de code dans mon message original – benhowdle89

0

Avez-vous essayé d'utiliser NSNotificationCenter? Ceci est très utile pour ce genre de situations et permet de résoudre facilement des problèmes de ce genre. De même, vous pouvez facilement mettre à jour plusieurs objets/vues en un seul appel.