2013-07-11 3 views
0

나는 재미로 Master/Detail CoreData RSS 리더를 작성하는 중입니다. Category 1->n Feed 0->n Post핵심 데이터 : 관리 객체 수정은 나머지 UITableView 레코드로 전파됩니다.

그래서 내 UISplitView의 왼쪽 창에서 범주별로 그룹화 피드가 있습니다 :

나는 다음과 같은 개체를 사용합니다. 피드를 선택하면 가져온 다음 오른쪽 창에 게시물을 표시합니다.

오른쪽 창에는 2 종류의 프로토 타입 셀인 readunread이 포함되어 있습니다.

readunread는 해당 속성 Post ManagedObject의 (NSDate *)read에 의존한다 : 그것은 nil가 있다면, 그때는 unread 원형 셀을 사용하여 표시 할 수있다. 나는 포스트 셀을 선택할 때마다, 나는 오른쪽 창에 웹보기 창을 밀어 거랑를 따라 지금

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

:

다음은 cellForRowAtIndexPath 메서드에 대한 코드입니다. 이 WebView는 관련 Post.url 페이지의 내용을 표시합니다. 동시에, 현재 NSDate로 설정할 현재 관리 객체 read 속성을 편집합니다. 내가있는 UIWebView 팝 그리고, 녹화 후 셀을 다시 피드 목록에 올 때 : 나는 다음 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]; 
} 

을, 여기에 내 문제입니다 다음의 모든 셀은 처음으로 read으로 표시됩니다. 두 번째로 UITableView의 모든 셀은 read으로 표시됩니다.

아무도 내가 여기서 잘못하고있는 것을 말할 수 있습니까? 선택한 개체 만 읽음으로 표시 되길 바랍니다 ...

미리 도움을 주셔서 감사합니다.

편집 :

이는 didSelectRowAtIndexPath 방법이 라인에서 올 수 있을까요?

[post setValue:[NSDate date] forKey:@"read”]; 

난 아직도 setValue 대 점 표기법에 의해 혼란 스러워요 ...

편집 2 :

아니 :(

post.read = [NSDate date]; 

나는로 교체해야 방금 테스트했습니다.

답변

0

해결되었습니다.

다른 데이터는 수정되지 않았습니다....

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

static 변수가 다른 행에 영향을 미치는 한

- (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; 
     feedTableIdentifier = @"unread"; 
    } 

하였습니다

: I는 cellForRowAtIndexPath 방법을 다음과 같은 방식으로 변경

관련 문제