質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

iPhone 6

iPhone 6は、2014年に発売されたアップル社のスマートフォンです。画面サイズは4.7インチあり、A8コアチップとM8モーションコプロセッサを搭載しています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

1572閲覧

デバッグメッセージについて

koike

総合スコア24

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

iPhone 6

iPhone 6は、2014年に発売されたアップル社のスマートフォンです。画面サイズは4.7インチあり、A8コアチップとM8モーションコプロセッサを搭載しています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/10/27 06:59

TableViewをつかってグラフを表示するアプリを作っています。
データはJSONで取得しており、取得結果は50でした。
50/100=0.5という値を制約に追加して対応しました。

シュミレーションで上下に動かしたら、下記のメッセージが表示されました。
ちなみに、メッセージは縦向きではでません。(横向きの時だけでます)

さらに、JSONで取得した50ではなく、手入力で「50」としたら、
問題なく動作します。(デバッグメッセージはでません)

どなたか、お知恵をお貸し願えませんでしょうか?

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x7fd7ebd5b8b0 UIView:0x7fd7ebd597e0.width == 0.5UITableViewCellContentView:0x7fd7ebd59650.width>",
"<NSLayoutConstraint:0x7fd7ebd5bb60 H:|-(0)-[UIView:0x7fd7ebd597e0] (Names: '|':UITableViewCellContentView:0x7fd7ebd59650 )>",
"<NSLayoutConstraint:0x7fd7ebd5bbb0 H:[UIView:0x7fd7ebd5a300]-(5)-| (Names: '|':UITableViewCellContentView:0x7fd7ebd59650 )>",
"<NSLayoutConstraint:0x7fd7ebd5bd40 H:[UIView:0x7fd7ebd597e0]-(0)-[UIView:0x7fd7ebd5a300]>",
"<NSLayoutConstraint:0x7fd7ebe96450 UILabel:0x7fd7ebd5a490'7'.width == 0.4
UIView:0x7fd7ebd5a300.width>",
"<NSLayoutConstraint:0x7fd7ebd21010 UILabel:0x7fd7ebd5a490'7'.width == 0.07*UIView:0x7fd7ebd5a300.width>",
"<NSLayoutConstraint:0x7fd7ebffbfd0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x7fd7ebd59650(736)]>"
)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

下記が、UITableViewCellに割り当てているクラスです。
class TableViewCell: UITableViewCell {
//セル幅
@IBOutlet weak var rightView: UIView!
//比率を表す棒グラフ
@IBOutlet weak var graphLabel: UILabel!

// セル内セット(50がきます) func configureCell(qty: Int){ let multiplier = CGFloat(qty) / CGFloat(100) rightView.addConstraint( NSLayoutConstraint( item: self.graphLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: self.rightView, attribute: NSLayoutAttribute.Width, multiplier: multiplier, constant: 0 ) ) }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

<NSLayoutConstraint:0x7fd7ebe96450 UILabel:0x7fd7ebd5a490'7'.width == 0.4UIView:0x7fd7ebd5a300.width>

<NSLayoutConstraint:0x7fd7ebd21010 UILabel:0x7fd7ebd5a490'7'.width == 0.07
UIView:0x7fd7ebd5a300.width>
の2つが、同じ項目に対して異なる比率を割り当てることになっているので問題なのだと思います。

提示されたコードでaddConstraintしていますが、removeConstraintはどこでやっていますか?
適切にremoveConstraintしていない場合、おそらくTableViewの表示でセルを再利用する際に、
前回使用したセルに設定されていたconstraintを削除しないで新しいconstraintを追加する
ことになっている可能性があると思います。

投稿2015/10/27 15:21

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koike

2015/10/28 01:22

ありがとうございます。 セルの再利用時にconstraintが重複しているのですね。 今回の症状の原因がよくわかりました。 追加でremoveConstraintについて教えて下さい。 単純にaddConstraintの直前にremoveConstraintしようと考えています。 rightView.removeConstraint(XXX) このXXXには何を記述すれば良いでしょうか?
TakeOne

2015/10/28 03:09 編集

> このXXXには何を記述すれば良いでしょうか? 削除したいconstraintです。 rightView.constraintsの配列の中から追加済みのconstraintを探す方法もありますが、自分で追加したconstraintをTableViewCellのプロパティに覚えておき、新しいconstraintを設定する時に、前回追加されたconstraintがプロパティに登録されていれば、そのconstraintを削除してから新しいcontraintを追加するのが簡単だと思います。
koike

2015/10/28 04:01

メッセージが出なくなりました。 追加した制約をどうやって消せばよいのか? 「TableViewCellにプロパティを設置して覚えて消す」 非常に簡単簡潔な方法でした。 rightViewの制約から追加済みのconstraintを探すことばかり考えていました。 本当に助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問