2010-11-13 87 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嗎?這對於這些情況非常有用,並且可以輕鬆解決這樣的問題。另外,通過這種方式,您可以使用一次調用輕鬆更新多個對象/視圖。