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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1125閲覧

Xcodeで1つのAction、Outletが複数のStoryboardと接続されてしまう

Galakuta09

総合スコア18

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2019/01/03 09:11

別なプロジェクトで同じコードを使おうと思いコードをコピペしたところ、書かれていたIBAction、IBOutletに関し、旧プロジェクトのStoryboardへの接続がそのまま残ってしまってしまいました。
◉部分をクリックすると双方への接続が出て、コピー元を選ぶと別ファイルの旧Storyboardが新プロジェクトの中に表示されてしまいます。

ペースト時にPaste & Preserve Formatting(ペースとしてスタイルを合わせる)をしてもダメ。
一度テキストエディットでプレーンなテキストにしたものをコピペし直してもダメ。
コードのその部分を削除し、新たに接続しなおしても、同じAction/Outlet名だと同じことになります。
実用上問題なさそうなんですが、あまり気持ちいいものじゃないので解消できないでしょうか?
Xcode10ですが、以前のバージョンでも同じことになった記憶があります。

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

Storyboardを開いた状態で、該当のviewを選び、

Xcodeの、Menuバーの
「View→Inspectors→Show Connections inspectors」を選び、
該当のいらない接続を削除(選びんでdeleteキーを押す)で消せますよ。

その後に、新たに記入して接続しなおせばスッキリしますよ。

最終的に解決してよかったです。
違うプロジェクト?なのかどうかが引っかかりますが、
いずれにしろ名前は切り離した方がいいと思います。

投稿2019/01/04 09:02

編集2019/01/04 16:08
hameji001

総合スコア639

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

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

Galakuta09

2019/01/04 15:21

回答ありがとうございます。 試してみたのですがうまくいきません。 Referencing OutletsやSent Eventsの接続は新の方の一つしか出て来ず、それを削除(選んでdeleteキーを押すとStoryboardのUI部品の方が消えてしまうので、インスペクタ中の×印を押して削除しました)して再接続、もしくはActionやOutletを書き直しても、旧のコードと同じ名前にするとやはり新旧のStoryboard両方から接続されていることになってしまいます。 プロジェクトファイルがどこかで旧プロジェクトファイルを参照している感じです。 旧プロジェクトの進化バージョンなので、共通の内容が多く、ソースレベルでのコピペはだいぶしましたが、ファイル自体、ましてやStoryboardのコピペなどはしていないのですが?
hameji001

2019/01/04 15:31 編集

まさかとは思いますが、ファイル名(XXXXViewController.swift)はきちんと変えていますか??? 左側のNavigationのファイル名はもちろん、Swiftファイルの中の class XXXViewController: UIViewController { のとこも、新たにして(もちろんNavigationの名前と一致させてくださいね)、 それを該当のStoryBoardのViewControllerのClassとして違うものとして設定していないと、 きっと、同じ名前だったら、交差してしまうんじゃないかと想像されます。
Galakuta09

2019/01/04 15:52

そのまさかで、新旧のプロジェクトとも同じTitle.swiftやViewController.swiftを使っています。 まったく別なプロジェクトファイルなので参照されるはずがないと思ってたんですが、Xcodeはプロジェクトに関係なく同じファイル名があると同じものとして参照してしまうんでしょうか? もしそうだとすると、デフォルトのViewController.swiftなどもその都度変えた方が良さそうですね。(実害はなさそうですが)
hameji001

2019/01/04 15:58 編集

違うプロジェクトを超えて参照???している??? 何てこと起こるんですか??? その違うプロジェクトを開かなければいいじゃないですか??? 同じプロジェクト内なら、名前が同じはもろんダメです。 それはプログラムが混乱する元です。 ファイル名を元にプログラムは動いているので。 もちろん、デフォルトのViewControllerをそのまま使うのもいただけません。 何のViewControllerかわかるような名前をつけるべきです。 mapならMapView, 日記のTableならDiaryViewとか、、、 小さいプログラムだと気にならないかもしれませんが、 割とファイル数が増えてくると、 どのファイルが何を書いてあるか多少でもわかるようにする方がいいですよ。
hameji001

2019/01/04 16:01

あとは、お互いのファイルの位置関係が同じプロジェクトファイル内に入っているなら、 起こりえるかもしれません。 どんな位置関係なんですか???
Galakuta09

2019/01/04 16:04

試しに新の方をTitle2.swift、class Title2などに変えてみたところ、たしかに旧プロジェクトからの参照が切れてくれました。 むろん必要に応じて変更はしていましたが、今まで知らずに使っていました。プロジェクトが違っても、そういうものなんですね…^^; 今度からは例えば同じMapViewのファイルでも、Prefixでもつけて区別するようにします。 ありがとうございました。
Galakuta09

2019/01/04 16:23

違うプロジェクトを超えて参照されちゃっていたんです。なぜか。 違うプロジェクトを閉じてもダメで、閉じた後にXcodeを再起動したら大丈夫になったようです。 コードコピペなどの都合で新旧プロジェクトを開いていました。 新旧ともDevelopフォルダ内の同階層に、完全に別のフォルダ、プロジェクトとして存在しています。新を旧のプロジェクトフォルダ内に…なんていうことはしていません。 思うに、Xcodeが同時に開いてる同一ファイル名があった場合、どのプロジェクトに属するファイルなのかを判断していないのかもしれません。 片方を閉じただけじゃ情報が残っているために、Xcodeを再起動しないとクリアされないとか。 ビルドの際はさすがに所属するプロジェクトをチェックするために実害が生じていないんだと思われます。
hameji001

2019/01/04 16:25

Galakuta09さん、自分も勉強になりました。 自分も時々、コピーすることあるので気をつけます。 GitHubでバージョン管理すると本当はコピーとかしないでいいんですけどね。 Galakutaさんにもオススメします。
Galakuta09

2019/01/04 16:30

今度試してみますね。どうもありがとうございました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問