我用UITableView编写了一个简单的RSSReader。我可以通过在ViewController类中实现UITableDataSource来创建指定的feed。但是,我正在尝试显示输入到文本框中的Feed。我已经使用NSLogs进行调试,并且在按下按钮时正确解析输入的Feed。但是,在[[self tableOfFeeds] reload]
时,视图不会更新。
- (void)viewDidLoad
{
[super viewDidLoad];
[self setNf: [[NewsFeed alloc] init]];
if ([textFieldUserInput.text length] == 0)
link = @"http://afeedurl.com/feed.rss";
[self.nf setFeedUrl:[NSURL URLWithString:link]];
[self.nf retrieveFromInternet];
for (id newsItem in [self.nf newsStories]){ // Debug
NSDictionary * d = (NSDictionary *) newsItem;
NSLog(@"Title: %@ \n %@", [d objectForKey:@"title"], [d objectForKey:@"description"]);
}
[[self tableOfFeeds] setDataSource:self];
[[self tableOfFeeds] setRowHeight:70.0];
[[self tableOfFeeds] reloadData];
}
这是改变Feed的动作。
- (IBAction)refreshFeed:(id)sender {
NSString * ui = self.textFieldUserInput.text;
if ([ui length] == 0) // If text field is blank, then reload the old feed from internet.
[[self tableOfFeeds] reloadData];
else {
[self.nf setFeedUrl: [NSURL URLWithString:ui]];
[self.nf retrieveFromInternet];
[[self tableOfFeeds] setDataSource: self];
[[self tableOfFeeds] reloadData];
for (id newsItem in [self.nf newsStories]){ // Debug
NSDictionary * d = (NSDictionary *) newsItem;
NSLog(@"Title: %@ \n %@", [d objectForKey:@"title"], [d objectForKey:@"description"]);
}
}
}
答案 0 :(得分:0)
问题中的上述代码似乎是有效的。我将问题追溯到这种方法。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString * cellId = @"feeds";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
NSMutableDictionary * news = (NSMutableDictionary *) [[[self nf] newsStories] objectAtIndex: indexPath.row];
[[cell textLabel] setText: [news objectForKey:@"title"]];
[[cell detailTextLabel] setText: [news objectForKey:@"description"]];
[[cell detailTextLabel] setNumberOfLines:2];
}
return cell;
}
声明NSMutable Dictionary并设置单元格文本的部分需要超出if语句。
我认为这是有效的,因为我想要更改的大多数单元格已经包含数据,因此不需要调用alloc / init。