2013-05-07 3 views
1

저는 coredata를 처음 사용합니다. 내가 가지고 있어요
1. 내가 입력하고 해당 엔터티 coredata에서 만든 데이터를 저장 mainview 컨트롤러.
2. 그 다음에 사용자가 입력 한 데이터를 집합 적으로 표시하는 tableview (totalTableView) 컨트롤러가 있습니다.
3. 현재 하루 만 입력 된 데이터를 보여주는 또 다른 tableview (todaysTableView)가 있습니다.coredata에 저장된 오브젝트를 삭제 한 후에도 이전 tableViewController에있는 오브젝트가 유지됩니다.

모두는 내비게이션 컨트롤러로 연결됩니다. todaysTableView에서 객체를 삭제하면 객체 자체가 사라지고 totalTableView로 되돌아 가면 객체가 그대로 남아 있습니다. 또한 내 mainview 컨트롤러 (홈 화면)로 돌아 오는 길을 탐색 한 다음 내 totalTableView로 이동하면 삭제 된 개체가 없어지고 이제는 지워지고 이제는 완벽 해집니다. 내가 삭제 한 후 즉시 totalTableView로 돌아갈 때 왜 지워지지 않는지. 내 viewcontrollers의
흐름이

mainViewController처럼 -> totalTableView -> todaysTableView

여기

의 객체 ID로 개체를 삭제하는 todaysTableView의 m.file 내 코드가

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

{ 

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

if (editingStyle == UITableViewCellEditingStyleDelete) { 

    // Delete the row from the data source 


    [managedObjectContext deleteObject:[managedObjectContext objectWithID:moID]]; 

    [managedObjectContext save:nil]; 

    NSLog(@"object id check %@",moID); 

    NSError *error = nil; 

    if(![managedObjectContext save:&error]) 

    { 
     NSLog(@"deleting error"); 

     return; 
    } 

    [self.todaysCategory removeObjectAtIndex:indexPath.row]; 

    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:(UITableViewRowAnimationFade)]; 

    [self.tableView endUpdates]; 

} 

누구든지 나를 고칠 수 있다면. 미리 감사드립니다.

+2

테이블 뷰에 NSFetchedResultsController를 사용합니까? - 그렇지 않다면 한번보세요! –

+0

@ MartinR 나는 그것을 볼 것이다. 감사합니다. –

+0

UITableView reloadData. –

답변

2

TotalTableView는 메모리에 일부 NSManagedObject를 보유하고 초기화시 가져옵니다. 핵심 데이터에는 개체를 삭제할 때 totalTableView에 알리는 메커니즘이 있지만이를 사용해야합니다.

TotalTableView에서 개체를 삭제할 때 해당 개체를 표시하려면 NSManagedObjectContextObjectsDidChangeNotification에 응답해야합니다. 이것을 받으려면 기본 알림 센터에 등록하면 개체가 변경 될 때 상황에 따라 알림을 받게됩니다.

[[NSNotificationCenter defaultCenter] addObserverForName:NSManagedObjectContextObjectsDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification* notification) { 
    // Either reload your data, or respond case by case. 
}]; 

보낸 사람 : 알림 개체는 관리되는 개체 컨텍스트입니다. userInfo 딕셔너리에는 NSInsertedObjectsKey, NSUpdatedObjectsKey 및 NSDeletedObjectsKey 키가 포함되어 있습니다.

+0

답변 주셔서 감사하지만 실제로 내 코드에서 이것을 사용하는 방법을 모르겠다 –

+0

그것은 totalTableView에서 데이터를 가져 오는 방법에 따라 다릅니다. 이 코드는 객체가 변경 될 때마다 실행될 블록을 등록합니다. 이 위치를 viewDidLoad와 같은 위치에 두어야합니다. 블록의 내용은 편집 컨텍스트에서 데이터를 다시로드하고 tableView에 reloadData를 전달해야합니다. 이 작업은 다시 페치 (fetch)하거나 사전 키를 사용하여 삭제되거나 추가 된 객체의 객체 ID를 가져와 memmory 구조를 조정할 수 있습니다. –

+0

알림 메서드를 시도하고 tableview를 다시로드하지만 여전히 삭제 된 개체는 앱을 다시 시작할 때까지 거기에 있습니다. 사실 내가 2 테이블 뷰에서 개체를 삭제할 때 그리고 내가 다시 1 테이블 뷰로 돌아갈 때 데이터가 내 애플 리케이션을 다시 시작할 때까지 첫 번째 tableview에있다. –

관련 문제