タグ付けされた質問 「constraints」

制約は、特定のコンテキストで満たさなければならない条件です。制約は通常、データベースやプログラミング言語で使用され、エラーを検出し、データの一貫性と正確性を確保し、ビジネス要件を適用します。


16
UIViewに影響を与えるすべての制約を削除します
いくつかの制約を介して画面に配置されるUIViewがあります。一部の制約はスーパービューによって所有され、その他の制約は他の祖先によって所有されます(たとえば、UIViewControllerのviewプロパティ)。 これらの古い制約をすべて削除し、新しい制約を使用して新しい場所に配置したいと思います。 すべての制約に対してIBOutletを作成せず、どのビューがその制約を所有しているかを覚えておく必要なしに、これを行うにはどうすればよいですか? 詳述すると、単純なアプローチは、制約ごとにIBOutletsの束を作成し、次のようなコードを呼び出すことです。 [viewA removeConstraint:self.myViewsLeftConstraint]; [viewB removeConstraint:self.myViewsTopConstraint]; [viewB removeConstraint:self.myViewsBottomConstraint]; [self.view removeConstraint:self.myViewsRightConstraint]; このコードの問題は、最も単純な場合でも、2つのIBOutletを作成する必要があることです。複雑なレイアウトの場合、これは4つまたは8つの必要なIBOutletsに簡単に到達する可能性があります。さらに、制約を削除するための呼び出しが適切なビューで呼び出されていることを確認する必要があります。たとえば、myViewsLeftConstraintがによって所有されていると想像してくださいviewA。誤って電話をかけても[self.view removeConstraint:self.myViewsLeftConstraint]、何も起こりません。 注:メソッドconstraintsAffectingLayoutForAxisは有望に見えますが、デバッグのみを目的としています。 アップデート:私は契約を受けています回答の多くはself.constraints、self.superview.constraintsこれらの、またはいくつかの変種。これらのメソッドは、ビューに影響を与える制約ではなく、ビューが所有する制約のみを返すため、これらのソリューションは機能しません。 これらのソリューションの問題を明確にするために、次のビュー階層を検討してください。 祖父 お父さん 私 息子 娘 兄 おじさん ここで、次の制約を作成し、それらを常に最も近い共通の祖先にアタッチするとします。 C0:私:息子と同じトップ(私が所有) C1:私:幅= 100(私が所有) C2:私:ブラザーと同じ高さ(父が所有) C3:私:おじさんと同じトップ(祖父が所有) C4:私:祖父と同じ左(祖父が所有) C5:兄弟:父と同じ左(父が所有) C6:おじさん:おじいさんと同じ左(おじいさんが所有) C7:息子:娘と同じ左(私が所有) ここで、に影響を与えるすべての制約を削除したいとしますMe。適切な解決策は削除する必要が[C0,C1,C2,C3,C4]あり、他には何もありません。 self.constraints(selfがMeである場合)を使用[C0,C1,C7]すると、Meが所有する唯一の制約であるため、が取得されます。明らかに、これが欠落しているため、これを削除するだけでは十分ではありません[C2,C3,C4]。さらに、C7不必要に取り外しています。 私がself.superview.constraints(自己が私である場合)を使用する場合[C2,C5]、それらは父が所有する制約であるため、私は取得します。とC5はまったく関係がないため、明らかにこれらすべてを削除することはできませんMe。 を使用するとgrandfather.constraints、取得し[C3,C4,C6]ます。繰り返しますが、そのC6ままにしておく必要があるため、これらすべてを削除することはできません。 強引なアプローチは、ビューの祖先(それ自体を含む)のそれぞれをループし、ビュー自体であるかどうfirstItemかsecondItemを確認することです。その場合は、その制約を削除します。これにより、正しい解が返され[C0,C1,C2,C3,C4]、が返され、それらの制約のみが返されます。 ただし、祖先のリスト全体をループするよりも、より洗練されたソリューションがあることを望んでいます。

2
PostgreSQL:デフォルトの制約名
PostgreSQLでテーブルを作成する場合、指定されていない場合はデフォルトの制約名が割り当てられます。 CREATE TABLE example ( a integer, b integer, UNIQUE (a, b) ); しかしALTER TABLE、制約を追加するために使用すると、名前が必須のようです。 ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b); これにより、私が取り組んだプロジェクトで名前の不一致が発生し、次の質問が表示されます。 テーブルの作成中に追加された場合に受け取る名前で、既存のテーブルに制約を追加する簡単な方法はありますか? そうでない場合は、不整合を防ぐためにデフォルト名を完全に回避する必要がありますか?

8
実行時に制約の優先度を変更するにはどうすればよいですか
動的な高さのビューがあり、実行時にこのビューの高さの優先度を変更しようとしています。 これが私のコードの一部です。 if (index == 0) { surveyViewHeightConstraint.constant = 0; surveyViewHeightConstraint.priority = 1000; } else if (index == 1) { surveyViewHeightConstraint.constant = 163; surveyViewHeightConstraint.priority = 500; } ボタン操作でインデックスを変更しています。このコードを実行すると、次のエラーが発生します。 *** Assertion failure in -[NSLayoutConstraint setPriority:], /SourceCache/Foundation/Foundation-1141.1/Layout.subproj/NSLayoutConstraint.m:174 ここでの私の間違いは何ですか?

7
制約の名前がわからない場合、Oracleで「非NULL」制約を削除するにはどうすればよいですか。
フィールドにNOTNULL制約があるデータベースがあり、この制約を削除したいと思います。複雑な要因は、この制約にはシステム定義の名前があり、その制約の名前は本番サーバー、統合サーバー、およびさまざまな開発者データベース間で異なることです。現在のプロセスは変更スクリプトをチェックインすることであり、自動化されたタスクがターゲットデータベースに対してsqlplusを介して適切なクエリを実行するため、sqlplusに直接送信できるソリューションをお勧めします。 私自身のデータベースでは、これを削除するSQLは次のようになります。 alter table MYTABLE drop constraint SYS_C0044566 all_constraintsビューをクエリすると、制約が表示されます。 select * from all_constraints where table_name = 'MYTABLE' しかし、SEARCH_CONDITIONのLONGデータ型を操作する方法や、名前を知った後でもルックアップされた制約を動的に削除する最善の方法がわかりません。 では、名前ではなく、制約に基づいてこの制約を削除できる変更スクリプトを作成するにはどうすればよいでしょうか。 編集:@Allanの答えは良いものですが、(Oracleの専門知識が不足しているため)システムで生成された名前を持つ可能性のある制約がそれに関連付けられて、名前を知らなくても制約。システム名の制約を論理的に削除するときに、その制約の名前を知らなくても済むようにする方法が常にあるというのは本当ですか?

7
iOSでプログラムでアスペクト比の制約を設定するにはどうすればよいですか?
ビューコントローラに自動レイアウトを使用しました。VとHの位置を制約で設定しましたが、ボタンのサイズが5s、6、6 Plusに変わったときに、どうすればボタンのサイズを大きくできるか知りたいです。これは、ログインボタンに制約を追加した方法です。 NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary]; [btnLogin addConstraints:btncon_V]; NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_H]; NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_V]; しかし、私の問題は、左右のギャップを管理しながら、高さが固定されているため、iPhone6および6Plusでは伸びてしまうことです。画面サイズに応じてサイズを大きくするにはどうすればよいですか?これはアスペクト比かもしれないと思いますが、コードでアスペクト比の制約を設定するにはどうすればよいですか?

6
プログラムによるレイアウト制約の作成
多くの人がすでにこれについてたくさんの質問をしていることを私は知っています、しかし答えがあっても私はそれを機能させることができません。 ストーリーボードの制約を扱うときは簡単ですが、コードでは苦労します。たとえば、右側にとどまり、画面の向きに応じた画面の高さを持つビューを作成しようとしています。これは私のコードです: UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 748)]; myView.backgroundColor = [UIColor redColor]; [self.view addSubview:myView]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[myView(>=748)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myView)]]; いくつかの制約を満たしていません。何が悪いのかわかりません。また、のようなself.myViewローカル変数の代わりにのようなプロパティを使用できないのはなぜmyViewですか?

2
制約データベース
私は制約プログラミングの背後にある直感を知っているので、制約ソルバーを使用したプログラミングを実際に経験したことはありません。一貫性のあるデータとして定義することを達成できるようになるのは、別の状況だと思いますが。 環境: ETLサーバーに実装する一連のルールがあります。これらのルールは次のいずれかです。 一列に作用します。 行間、1つまたは異なるテーブルでの動作。 2つの実行間で同じように動作します(すべてのデータ、または最後のn回の実行に対して同じ制約を維持する必要があります)。 3番目のケースは、2番目のケースとは異なります。2番目のケースが成立するときに成立しますが、明確に定義された実行数の場合です。これは、1回の実行(1つのファイル)またはその間の(1からn(前の)またはすべてのファイル)に適用できます。 技術的にはETLを考案したため、2つの実行の間にメモリはありません:2つのファイル(ただし、これは再考されます) 3番目の種類のルールを適用するには、ETLにメモリが必要です(データをETLでバックアップすることになると思います)。または、ある時間枠の後でデータベース全体を無限に再チェック(ジョブ)することで、データベースに到達するデータは、必ずしも3番目の種類のルールを時間内に満たす必要はありません。 例: 継続的に流れるデータがありますが、制約されたデータベース全体に制約を適用します。翌日、たとえば1か月のバックアップまたは修正データを受け取ります。この時間枠では、これだけの制約が満たされるようにしたいと考えていますデータベース全体を気にせずに実行(この時間枠)。将来の実行では、過去のデータを気にせずにすべてのデータを以前と同様に制約する必要があります。時相論理に適合する他のルールを想像できます。 現時点では、最初の種類のルールのみが実装されています。私が考えた方法は、以前に基づいた一貫性を参照するフラグを使用してすべてのデータ(制約された列のみ、おそらくハッシュ値で)をバックアップする(あらゆる種類のMySQL、PostgreSQL、MongoDBなどの)縮小データベースを用意することです一種のルール。 質問:このプロセスを容易にする解決策/概念の代替案はありますか? するために、説明クックプログラミング言語で、一連のルールと次のアクションの例: run1 : WHEN tableA.ID == tableB.ID AND tableA.column1 > tableB.column2 BACK-UP FLAG tableA.rule1 AFTER run1 : LOG ('WARN') run2 : WHEN tableA.column1 > 0 DO NOT BACK-UP FLAG tableA.rule2 AFTER run2 : LOG ('ERROR') 注:制約プログラミングは理論的には組み合わせ問題を解決するためのパラダイムですが、実際には問題の開発と実行を高速化できます。これは、制約を解決する問題とは異なると思います。最初の目的は解決前に制約を最適化することではないため、おそらくデータドメインを制限することもありません。主な関心事は、データ受信にルールを適用し、いくつかの基本的なアクションを実行することです(行の拒否、行の受け入れ、ロギング...)。 これが非常に広範な質問ではなく、これが正しい場所であることを本当に望みます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.