2017-01-17 1 views
0

Big Nerd Ranch BNRCoreDataStack을 사용하고 있지만 표준 CoreData을 사용하는 경우이 문제가 있다고 의심됩니다.CoreData 개체를 삭제하면 FetchedResultsController에서 오류가 발생합니다.

NSManagedObjects를 가져 와서 테이블을 채우는 데 FetchedResultsController이 있습니다. 이들은 섹션과 행에서 렌더링됩니다. 이후

[error] error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. attempt to insert row 0 into section 1, but there are only 1 sections after the update with userInfo (null) 

이 테이블에 표시 내 세포를 남겨두고, 내가 하나를 누를 때 나는이 오류를 얻을 :

내 문제는 내가 삭제하면 내 다른 곳 NSManagedObjects, 나는 FetchedResultsController에서 오류가 발생한다는 것입니다
fatal error: Index out of range 

따라서 CoreData 객체를 삭제할 때 FetchedResultsController이 테이블에서 셀을 제거하지 못했습니다.

이상한 점은 viewWillAppear에있는 테이블 데이터를 다시로드한다는 것이므로 테이블을 지울 것이라고 가정합니다. FetchedResultsController에서 데이터에 대한 모든 지식을 덤프하고 처음부터 시작하도록하려면 어떻게해야합니까?

+0

FetchedResultController 대리자를 구현해야합니다. http://stackoverflow.com/a/24983544/589224 –

+0

있습니다. 이 문제가 발생한 곳을 믿습니다 : -controllerDidChangeContent 호출하는 동안 NSFetchedResultsController 대리자에서 예외가 발견되었습니다 –

+0

내 개체 속성을 기반으로 섹션을 정렬하기 때문에이 생각합니다. –

답변

0

나는 그것을 알아 냈다. 내 관리 대상 객체는 Note 클래스입니다. 여기에 있습니다 :

@objc(Note) 
class Note: NSManagedObject { 

    @nonobjc override class func fetchRequest() -> NSFetchRequest{ 
     return NSFetchRequest(entityName: "Note"); 
    } 

    @NSManaged var title: String? 
    @NSManaged var body: String? 
    @NSManaged var day: CalendarDay? 
    @NSManaged var timestamp: NSDate? 
} 

extension Note: CoreDataModelable { 

    static var entityName: String { 

     return "Note" 
    } 

    var sectionTitle:String { 

     willAccessValueForKey("day") 
     defer { didAccessValueForKey("day") } 

     if day != nil { 

      return day!.timestampString! 

     }else{ 
      return "___" 
     } 
    } 
} 

알림이 추가 변수는 sectionTitle입니다. 글쎄, 내 FetchedResultsController은 섹션 정렬 키로 이것을 사용하고있었습니다. 이미 삭제 된 Day 개체에 액세스하려고하면 예외가 발생했습니다.

여기에서 배운 교훈은 이러한 변수를 관리 객체 클래스에 추가하는 것이 아니라 정렬에 사용할 수있는 엔티티의 관리 속성이 있는지 확인하는 것입니다. 좋은 이유로 관리되고 있습니다.

관련 문제