さまざまなエンティティと属性を持つコア データ Mac アプリがあります...これらの属性の 1 つが NSButton チェック ボックスにバインドされています...
ここに私の問題があります:ボタンをマウスでクリックすると、その状態が変化するのを見ることができます(たとえば、チェックされていない状態からチェックされている状態に変化します)。バインドされた属性の状態はデータコアに保存されます。アプリを再度開くと、ボタンはまだチェックされています...
しかし ...
このボタンの状態をプログラムで変更すると、その状態が変化するのを確認できます (同じ例で、チェックされていない状態からチェックされている状態に変化します)。ただし、バインドされた属性の状態はデータコアに保存されず、閉じて再アプリを開くと、ボタンはチェックされていない状態に戻ります!
何か案は ?
編集
では、説明を試みます (下手な英語で申し訳ありません) …</p>
Adherents と呼ばれるこのエンティティのいくつかの値を使用して、いくつかの操作と検証を行う必要があります (たとえば、date1> date2 の場合、checkbox1 がオンになり、checkbox2 がオンの場合、日付の比較に関係なく、checkbox1 がオンになります) …</p>
最初に、「NSManagedObject サブクラス ファイル Adherents.m」で、このエンティティの値を使用してこれらの操作を行うソリューションを指摘しました。
- (void)awakeFromFetch{
[super awakeFromFetch];
// Controle de la cotisation
aujourdhui = [NSDate date];
finCotisation = [NSDate dateWithString:[dateCotisation description]];
controle = [aujourdhui compare:finCotisation];
if(controle == NSOrderedAscending)
{
self.cotisation = [NSNumber numberWithBool:1];
}
else if(controle == NSOrderedDescending)
{
if ([self.membreHonneur boolValue] == 0)
{
self.cotisation = [NSNumber numberWithBool:0];
}
else if ([self.membreHonneur boolValue] == 1)
{
self.cotisation = [NSNumber numberWithBool:1];
}
}
}
そのように、操作はアプリの起動時にのみ発生します。これは良いことですが、十分ではありません…「途中で」(ユーザーが NSDatePicker を介して日付を入力または変更した直後) 実行するには、私が見つけた最良の解決策は、日付ピッカーはユーザーによって編集されています... AppDelegate.mファイルでしかできないようです(Adherents.hで「IBOutlet NSDatePicker *champDate;」を宣言しようとしましたが、アウトレットをチェックボックスに接続できませんでしたInterface Builder で …)、そこからエンティティ値にアクセスして操作することもできないようです (「self.cotisation」は、AppDelegate.m で使用すると不明なプロパティをもたらし、それを宣言する方法を見つけることができませんでしたAppDelegate.h で正しく)。
したがって、私の解決策は、AppDelegate でこれらの操作を行い、NSDatePicker の値を比較し、NSButton チェックボックスの状態に基づいて操作することです…
- (void)awakeFromNib {
[champDate setTarget:self];
[champDate setAction:@selector(checkDate:)];
}
-(void)checkDate:(id)object {
finCotisation = [NSDate dateWithNaturalLanguageString:[champDate stringValue]];
aujourdhui = [NSDate date];
NSComparisonResult controle = [aujourdhui compare:finCotisation];
if(controle == NSOrderedAscending){
[bouttonCotisation setState:TRUE];
}
else if(controle == NSOrderedDescending){
[bouttonCotisation setState:FALSE];
}
}
しかし、そのように振る舞うと、バインディングは失敗します…したがって、NSDatePicker を監視し、AppDelegate.m でプログラムによってチェックボックスの状態を変更する必要があります。すべてが束縛されているときはナンセンスです^^