私は、Locationというモデルオブジェクトを使用するコアデータアプリケーションを開発しています。ユーザーは場所を入力し、緯度と経度を10進形式で入力できます。私はこれに平文NSTextFields
を使用します。ユーザへのフィードバックとして、度数/分/秒の対応も表示されます(ラベルを使用)。 10進形式から次数などに変換するロジックは、NSManagedObject
のサブクラスであるLocationモデルオブジェクトで実装されます。コアデータアプリケーションで読み取り専用属性を実装する方法
理想的には、これらを読み取り専用属性として実装して、何らかの方法で小数点に結びつけたいので、ユーザーが小数点の表示を変更すると度/分/秒の表示も更新されます。
- は、編集内容を傍受する
NSTextFieldDelegate
として、コントローラを設定しますが、ユーザーが実際にフィールドを編集している場合のみ動作:は、私は、次の試してみました。これは、ユーザーが実際に有効な場所である緯度と経度の両方の既定値として0を受け入れると失敗します。
- 私はこれにアプローチする方法上の任意のアイデアをコアデータのための一時属性に見えたが、彼らはこのための答えかもしれませんが、この点についてのドキュメントは非常に有用ではないた...
ましたか?
EDIT:フランシスマグリューによって示唆されるように
、私はLocation
のために次のクラスメソッドを実装し:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
NSSet *result = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"latitudeToDegrees"] || [key isEqualToString:@"longitudeToDegrees"]) {
result = [result setByAddingObjectsFromSet:[NSSet setWithObjects: @"latitude", @"longitude", nil]];
}
return result;
}
彼の答えとは少し異なり、DMSはただ一つの属性がフォーマット文字列として表現されますLocation
で計算されます。その後、UIのバインディングをlatitudeToDegrees
とlongitudeToDegrees
に追加しました。うーん!、うまく更新されたUI。
華麗な!!ありがとう。 – Roger