2017-01-17 2 views
0

Big Nerd Ranch BNRCoreDataStackを使用していますが、標準CoreDataを使用していた場合にこの問題が存在すると思われます。CoreDataオブジェクトを削除するとFetchedResultsControllerがエラーになる

私はFetchedResultsControllerを持っていて、NSManagedObjectsをフェッチすることでテーブルを取り込むことができます。これらはセクションと行で表示されます。

[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) 

これは、その後の表に見える私の細胞を残して、私は1つをタップしたときに、私はこのエラーを取得:

私の問題は、私は他の場所で私の 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オブジェクトにアクセスしようとしたときに例外が発生しました。

ここで学んだことは、このような変数を管理対象オブジェクトクラスに追加するのではなく、ソートに使用できるエンティティの管理属性があることを確認することです。それは正当な理由で管理されています。

関連する問題