実機ビルドの際にunable to read module map contents fromというエラーが出た時の解決法

こんにちは。がわわです。

CocoaPodsでライブラリ管理をしていてある日突然題名の通りのエラーが出て焦りました。
解決法は以下です。

  1. Pods.xcodeprojファイルをクリック(Xcode画面上で青いアイコンのやつ)
  2. TARGETSでPodsを選択
  3. BuildSettingsから"module"で検索する
  4. Packagingに"Module Map File"があるのでその中身を消す

以上です。
pod installのたびにそこが書き換わっていて面倒だなと思っています。

Swiftでdelegateを使ってViewからViewControllerにアクションを渡す

こんにちは。がわわです。

Viewのサブクラスでボタンがタップされるなどのイベントを検知した時に、Viewで処理するのではなくViewControllerで処理した方が設計として綺麗だと思っています。

そういう時にdelegateを使いましょう。
delegateとは簡単に言えば処理を肩代わりしてくれる存在です。

import UIKit

protocol MyDelegate: class {
    func didTappedButton()
}

class MyView: UIView {

    weak var delegate: MyDelegate? = nil
    @IBOutlet weak var button: UIButton!
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
    
    @IBAction func tappedButton(sender: AnyObject) {
        self.delegate?.didTappeButton()
    }
}
import UIKit

class MyViewController: UIViewController, MyDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func didTappedButton() {
        println("test")
    }
}

これでMyViewでボタンをタップすると"test"と表示されます。

悩んでいる時にぱっと解決するための方法

はじめまして。がわわと申します。

技術的な内容を中心にブログを続けていけたらと思います。

 

今日の記事は「悩んだ時の解決法」です。

いきなり技術的な内容じゃないですけど笑

 

アイディアが浮かばない。

設計がうまくいかない。

なんだかもやもやする。

 

そんな時に僕がよく取っている方法があります。

 

メモ帳に「何で悩んでる?」と一言書くだけです。

 

それに対して

「そもそも何をテーマに考えるか最初に決めてないからだ」

「画面遷移で渡すデータが多すぎるからか」

「あー昨日の飲み会でちょっと言いすぎたことを気にしているからなんだ」

など質問に答える形で文字にします。

 

そうすると自然と上の回答から解決法が思いつくものです。

 

大事なのは悩んでいる原因を文字にすることです。

 

原因がわかりさえすれば問題は意外と簡単に解決するものです。

良かったら試してみてください。