viewController の init メソッドでキー パスが監視されています。( event は、この viewController のプロパティです
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...// some code
[self addObserver:self forKeyPath:@"event.location.title"
options:NSKeyValueObservingOptionNew context:NULL];
...// some more code
}
イベントは管理オブジェクトであり、場所と 1 対 1 の関係にあります。(各イベントには 1 つの場所オブジェクトがあり、その逆も同様です)
奇妙なことに、イベント オブジェクトがプロパティ viewController.event に設定される前に「場所」関係が発生しないと、次のエラーが発生します。
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Cannot update for observer <NSKeyValueObservance 0x17627340> for the key path
"location.title" from <Event 0x176de540>, most likely because the value for the key
"location" has changed without an appropriate KVO notification being sent. Check the
KVO-compliance of the Event class.'
私が言ったように、管理対象オブジェクトをviewControllerのプロパティに設定する前に次の行を追加すると、このエラーは修正されます。この場合、クラッシュせず、正しく動作します
Location* location = event.location;
viewController.event = event;
明らかにこれは回避策です。これを修正するためのアイデアはありますか?
編集
@"location" キーパスで に使用しsetRelationshipKeyPathsForPrefetching
たものを forNSFetchRequest
に使用すると、バグの回避策になるのではないかと考えていましたが、奇妙なことに、このバグは一時的に消えました。NSFetchedResultsController
私がした唯一のことは、アプリのさらなる開発でした。つまり、アプリを数回再インストールしました。そのため、DB が再び大きくなったときに再表示される可能性があります。これが発生したら更新します