2

NSArrayController を managedObjectContext にバインドし、配列コントローラーを使用して NSTableView を設定するという奇妙な問題が発生しています。オブジェクトを作成して挿入すると、新しいオブジェクトが追加され、コントローラーにバインドされた列の 1 つが更新されますが、他の列は更新されません! アプリを閉じてアプリを再起動すると、すべてが正しく入力されるため、フィールドが設定され、バインドが正しく機能していることはわかっています (おそらく)。

何が欠けているのかわからない!バインディングをデバッグするにはどうすればよいですか? ここで見つけたものから: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.html#//apple_ref/doc/uid/TP40002320-SW6 基本的にコントローラーまたはキー値コーディングのコンプライアンスである可能性があると言っているだけです。

エンティティを作成するコードは次のとおりです。

NSManagedObjectContext* context = [[BugManager shared] managedObjectContext];
NSError* error;
Bug* newBug = [NSEntityDescription insertNewObjectForEntityForName:@"Bug" inManagedObjectContext:context];
[newBug setValuesForKeysWithDictionary:data];
[context save:&error];

すべてのフィールドが正しく設定され、保存されていることを確認しました。また、値を明示的に設定して、それが問題を観察するキー値であるかどうかを確認しようとしました。

これは正しく更新されている列です。

ここに画像の説明を入力

正しく更新されていないものは次のとおりです。

ここに画像の説明を入力

そしてアレイコントローラー:

ここに画像の説明を入力

テーブルの列を再配置できますが、ターゲット フィールド (以前に更新していたフィールド) のみを更新します。テーブルのすべての列を正しく更新したいだけですが、予想以上に難しいです。

4

1 に答える 1

1

何時間も頭を壁にぶつけた後、私は問題を、バインディングがどのように設定されたかではなく(正しいので)、実際にデータがどのように作成されたかにたどり着きました。オブジェクトの入力に使用していたフォームには、テキストフィールドとテキストビューがありました。テキストフィールドは正しく機能していましたが、テキストビューは機能していませんでした。両方のテキストフィールドを試すように切り替えたときも、うまくいきました。または、文字列リテラルをハードコーディングした場合、バインディングは正しく更新されました。私にとっての修正はNSString*、テキストビューから明示を作成することでした。文字列を要求するとNSBigMutableString、何らかの理由でコアデータフィールドを設定しても通知が返されませんでした。

だから私はこれをしました:

NSString* description = [[NSString alloc] initWithString:[[[self descriptionField] textStorage] string]];

次に、その文字列値をエンティティに使用すると、すべてが正常に機能します。

于 2012-08-12T17:19:00.517 に答える