1

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 が再び大きくなったときに再表示される可能性があります。これが発生したら更新します

4

0 に答える 0