LoginSignup
1
2

More than 3 years have passed since last update.

[Tips]初心者向け XCodeやSwiftで困ったときの解消法

Last updated at Posted at 2020-10-18

環境

macOS:Catalina 10.15.6
Xcode:12.0
Swift:5.3

筆者について

趣味でswiftを勉強中の只のエンジニアです。仕事では全く使っていません。
swiftは2015年頃に一度勉強していて、最近再燃して勉強し直しています。

1.Stack Viewの制約がうまくつけられない

spacingの値に0以外の値が入っていると制約に影響が出てしまうようなので、
spacingには0を入力した方が良いです(制約に影響が出ない箇所なら可)。
スクリーンショット 2020-10-18 19.50.23.png

2.新しいクラスを作成しプロトコルを継承すると、警告が出る。

Cannot declare conformance to 'NSObjectProtocol' in Swift;
と言って怒られます。
この場合、import Foundationした上で、NSObjectを継承すれば解決です。
私の場合、import Foundationを削除した上で試行錯誤していたので、大変でした。

3.ビルドエラー

Multiple commands produce XXXが発生。
詳しく見るとTarget [アプリ名] has copy command from XXXTarget [アプリ名] has link command with output XXXが発生。
少し調べてみると何かが衝突しているようだった。.swiftファイルをXCode上で手動コピーしたのがまずかったのかと思う。
よく分からなかったので、プロジェクトを作り直すことで解決した。
XXX.swiftMain.storyboardFinder上で、旧プロジェクトフォルダから新プロジェクトフォルダへコピーすることで解決した。
Main.storyboardの場所が一瞬分からなかったが、Finder上では.../[アプリ名]/[アプリ名]/Base.Iproj/の中にある。

4.オブジェクトを比率で上手いこと調整したい(高さ40%のTableViewなど)

こちらのサイトが参考になります。

5.テキストが改行されない

改行コードを入れて任意の箇所で改行させたいが、改行されない。
¥nではどうも効かないようで、\nと入力する必要があった。
\optionキーを押しながら¥を押下で入力できる。

6..swiftファイルへOutlet接続、Actionができない

遷移先など新しくViewControllerを作成し、最初からあるViewControllerと同じようにびよーんと接続をしようとしたが、Object項目がExitしか選択できない。
スクリーンショット 2020-10-24 21.32.08(2).png

Storyboard上で対象のViewControllerを選択。
Identity InspectorCustom ClassからViewControllerに対応するクラスを選択する。
(画像は修正後)
スクリーンショット 2020-10-24 21.37.51(2).png

7.TableViewを外出しできない

ViewControllerの肥大化を防ぐ為、UITableViewDelegateUITableViewDataSourceを継承したクラスを別途作成し、そのクラスに処理を委譲することができる。
この場合、気をつける点がある。
委譲する先のクラスのインスタンスはviewDidLoad()の外で生成する必要がある。
まあ、少し考えてみれば当然だが。
委譲先をViewController(自分)にする場合は、viewDidLoad()の中でインスタンス生成しても問題なく動く。
本題とずれるが、タイミングなどの問題でインスタンス生成をviewDidLoad()の中でやりたい場合(何かの処理の後にしたい場合)、viewDidLoad()の外側で変数宣言だけしておき、viewDidLoad()の中で代入すれば問題ない。

8.ビルド時にCommand CompileAssetCatalog failed with a nonzero exit codeが発生

私の場合複数の画像ファイルを使用しており、数十枚程度ならエラーは出なかったが、ある1枚のファイルを追加するとエラーが発生、という事象が発生した。
調べても原因が分からなかった(OSXCodeは最新化したら解決するという記事もあったが解決しなかった)。
ひとつ心当たりがあって、pngファイルをjpgに変換した画像をAssets.xcassetsに追加していたのがマズいのではないかと思い、そのままpngで保存すると、大丈夫なようだった。
使用している画像ファイルが多く、最終的に解決しているか不明である為、参考程度にして頂きたい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2