我正在编写一个 Master/Detail CoreData RSS 阅读器,以获得乐趣。
我使用以下实体:
Category 1->n Feed 0->n Post
所以在我的 UISplitView 的左窗格中,有按类别分组的提要。选择一个 Feed 将获取,然后在右侧窗格中显示其帖子。
右侧窗格还包含一个 UITableView,它使用 2 种原型单元格:
read
和unread
.
read
并且unread
取决于(NSDate *)read
相应Post
ManagedObject 的属性:如果是nil
,那么它将使用unread
原型单元格显示。
这是该cellForRowAtIndexPath
方法的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *feedTableIdentifier = @"unread";
Post *thepost = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSDate *tmpDate=[NSDate date];
if (thepost.read) {
tmpDate=thepost.read;
feedTableIdentifier = @"read";
} else if (thepost.date) {
tmpDate=thepost.date;
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:feedTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:feedTableIdentifier];
}
((UILabel *)[cell viewWithTag:1]).text = thepost.title;
NSDateFormatter *df=[[NSDateFormatter alloc] init];
df.dateFormat = @"EEEE, MMMM d, YYYY";
((UILabel *)[cell viewWithTag:2]).text = [df stringFromDate:tmpDate];
((UILabel *)[cell viewWithTag:3]).text = [self flattenHTML:thepost.excerpt];
return cell;
}
现在,每当我选择一个 Post 单元格时,我都会遵循将 WebView 窗格推送到右侧窗格的 segue。此 WebView 显示相关Post.url
页面的内容。同时,我将编辑read
我将设置为当前 NSDate 的当前托管对象属性。然后,我将保存 ManagedObjectContext 并重新获取右窗格的提要以反映新格式:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
PostDetailController *webController = [[PostDetailController alloc] init];
if ([[segue identifier] isEqualToString:@"ShowWebLink"]) {
webController = [segue destinationViewController];
webController.urlstr = ((Post *)sender).url;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Post *post=[self.fetchedResultsController objectAtIndexPath:indexPath];
[self performSegueWithIdentifier:@"ShowWebLink" sender:post];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
post.read = [NSDate date];
NSError *error;
if (![self.managedObjectContext save:&error])
{
NSLog(@"[didSelectRowAtIndexPath] Error saving context: %@", error);
}
[self refetch];
}
现在,这是我的问题:当我弹出 UIWebView 并返回到 Feed 列表时,已录制的 Post 单元格和以下所有单元格现在都作为read
第一次显示。第二次,UITableView 中的所有单元格显示为read
。
谁能告诉我我在这里做错了什么?我只想将选定的对象标记为已读...
在此先感谢您的帮助。
编辑:
它可能来自didSelectRowAtIndexPath
方法中的这一行吗?
post.read = [NSDate date];
我应该将其替换为:
[post setValue:[NSDate date] forKey:@"read”];
我仍然对点符号与setValue
...
编辑2:
不 :( 刚做了测试。