2010-11-13 93 views
0

我里面RootViewController.m一个代码位:iphone传递价值给其他类

- (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]; 

}

所以,当用户点击该行,它进入RssFunViewController。但它使用BlogRssParser来填充RssFun的tableview。所以我试图在它之间取得一个值,并从RootView向BlogRss发送一个值,这样它就可以用正确的数据填充RssFun。

我有这个在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; 
} 

在控制台中,RootView方面的日志具有正确的值。但是在BlogRssParser中,它出现为(null)。我已经在BlogRssParser.m中声明了属性。

这是我宣布它:

@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; 

回答

0

使用self.terms来代替。除了访问器方法外,你不应该使用底层ivar。

+0

我试过在BlogRssParser中,仍然没有工作,你的意思是在别的地方? – benhowdle89 2010-11-13 11:29:08

+0

嗯。从第二个代码片段的方法是什么? – 2010-11-13 11:31:50

+0

我会在我原来的帖子中放置更多的代码 – benhowdle89 2010-11-13 11:37:29

0

你试过看NSNotificationCenter吗?这对于这些情况非常有用,并且可以轻松解决这样的问题。另外,通过这种方式,您可以使用一次调用轻松更新多个对象/视图。