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

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

ただいまの
回答率

90.52%

  • Swift

    7228questions

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

  • Xcode

    4090questions

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

TTTAttributedLabel使用時のエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 203

midori0822

score 32

こんにちは。早速本題です。

tableViewCellにTTTAttributedLabelをclassとしたLabelを置きました。
リンク内容リンク先を参考に実装しています。
下記が関連していそうなtableViewCellの内容です。

//cell
import UIKit
import TTTAttributedLabel


class TableViewCell: UITableViewCell,TTTAttributedLabelDelegate{

  @IBOutlet weak var label1: TTTAttributedLabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code

    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

  func setCell(textLabel:String,select:Bool){



    label1.enabledTextCheckingTypes = NSTextCheckingResult.CheckingType.link.rawValue

    label1.text = textLabel

    label1.delegate = self
}
  func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) {
    //処理
  }
}
 label1.enabledTextCheckingTypes = NSTextCheckingResult.CheckingType.link.rawValue


この一文でエラーが出ているようでアプリがクラッシュしています。

エラー文には
libc++abi.dylib: terminating with uncaught exception of type NSException
と出ています。接続を確認してみましたがおそらく大丈夫です。

TTTAttributedLabeを使うのは初めてなのでつまずいてしまいました。
label上のlinkを実装できるようにするにはこれからどのようにすれば良いですか。必要な情報があればお聞きください。分かる方返信お待ちしています。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

Storyboard or xibにラベルを配置していると思いますが、そのラベルのCustom Class はTTTAttributedLabelになっているでしょうか?

イメージ説明

それでも解決しなければコンソールに出ているエラーをすべて載せてください。

回答追記

import UIKit
import TTTAttributedLabel

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath as IndexPath) as? CustomCell {
            cell.setText(text: "URLにタップできます。\nhttps://www.google.co.jp/")
            return cell
        }
        return UITableViewCell()
    }
}

class CustomCell: UITableViewCell, TTTAttributedLabelDelegate {

    @IBOutlet weak var label: TTTAttributedLabel!

    func setText(text: String) {
        label.enabledTextCheckingTypes = NSTextCheckingResult.CheckingType.link.rawValue
        label.text = text
        label.delegate = self
    }

    func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) {
        print("Tapped!")
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/23 18:14

    カスタムクラスは設定してあります。
    コンソールは以下になります。
    ↓ ↓
    2018-05-23 18:09:03.760408+0900 A[74766:3575624] [MC] Lazy loading NSBundle MobileCoreServices.framework
    2018-05-23 18:09:03.761578+0900 A[74766:3575624] [MC] Loaded MobileCoreServices.framework
    2018-05-23 18:09:03.912145+0900 A[74766:3575624] Unknown class _TtC5TODO_18TTTAttributedLabel in Interface Builder file.
    2018-05-23 18:09:03.914006+0900 A[74766:3575624] -[UILabel setDelegate:]: unrecognized selector sent to instance 0x7f9b89549750
    2018-05-23 18:09:03.980232+0900 A[74766:3575624] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel setDelegate:]: unrecognized selector sent to instance 0x7f9b89549750'
    *** First throw call stack:
    (
    0 CoreFoundation 0x000000010173812b __exceptionPreprocess + 171
    1 libobjc.A.dylib 0x0000000100dccf41 objc_exception_throw + 48
    2 CoreFoundation 0x00000001017b9024 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3 UIKit 0x00000001024fcf51 -[UIResponder doesNotRecognizeSelector:] + 295
    4 CoreFoundation 0x00000001016baf78 ___forwarding___ + 1432
    5 CoreFoundation 0x00000001016ba958 _CF_forwarding_prep_0 + 120
    6 A 0x0000000100425a1d _T05TODO_13TableViewCellC03setD0ySS9textLabel_Sb6selecttF + 237
    7 A 0x00000001004092b6 _T05TODO_14ViewControllerC05tableB0So07UITableB4CellCSo0eB0C_10Foundation9IndexPathV12cellForRowAttF + 2646
    8 A 0x000000010040b63c _T05TODO_14ViewControllerC05tableB0So07UITableB4CellCSo0eB0C_10Foundation9IndexPathV12cellForRowAttFTo + 92
    9 UIKit 0x000000010242a484 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 778
    10 UIKit 0x000000010242aa2a -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
    11 UIKit 0x00000001023f01f6 -[UITableView _updateVisibleCellsNow:isRecursive:] + 3031
    12 UIKit 0x00000001024122e6 -[UITableView layoutSubviews] + 176
    13 UIKit 0x000000010239aa6d -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1439
    14 QuartzCore 0x000000010529261c -[CALayer layoutSublayers] + 159
    15 QuartzCore 0x00000001052967ad _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401
    16 QuartzCore 0x000000010521d86c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 364
    17 QuartzCore 0x000000010524a946 _ZN2CA11Transaction6commitEv + 500
    18 UIKit 0x00000001022f3167 _afterCACommitHandler + 272
    19 CoreFoundation 0x00000001016dac07 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    20 CoreFoundation 0x00000001016dab5e __CFRunLoopDoObservers + 430
    21 CoreFoundation 0x00000001016bf124 __CFRunLoopRun + 1572
    22 CoreFoundation 0x00000001016be889 CFRunLoopRunSpecific + 409
    23 GraphicsServices 0x00000001088d39c6 GSEventRunModal + 62
    24 UIKit 0x00000001022c95d6 UIApplicationMain + 159
    25 A 0x000000010042cd07 main + 55
    26 libdyld.dylib 0x0000000106181d81 start + 1
    )
    libc++abi.dylib: terminating with uncaught exception of type NSException
    (lldb)

    キャンセル

  • 2018/05/23 19:26

    > reason: '-[UILabel setDelegate:]: unrecognized selector sent to instance 0x7f9b89549750'

    TTTAttributedLabel ではなくてUILabelを参照している様に見えますね。一度IBOutletを削除してもう一度繋いでみてください。

    キャンセル

  • 2018/05/23 22:01

    再接続後も同じようにクラッシュしました。
    labelにやってはいけない設定、やらなければいけない設定でもあるのでしょうか?
    delegate処理を消して通してもクラッシュします。
    ↓↓
    MobileCoreServices.framework
    2018-05-23 21:59:48.045084+0900 A[76899:3696331] Unknown class _TtC5TODO_18TTTAttributedLabel in Interface Builder file.
    2018-05-23 21:59:48.047303+0900 A[76899:3696331] -[UILabel setEnabledTextCheckingTypes:]: unrecognized selector sent to instance 0x7fb9c1e2df40
    2018-05-23 21:59:48.055608+0900 A[76899:3696331] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel setEnabledTextCheckingTypes:]: unrecognized selector sent to instance 0x7fb9c1e2df40'

    キャンセル

  • 2018/05/23 22:14

    label1.text = textLabel
    のみだとクラッシュせず従来のlabelのように表示されます

    キャンセル

  • 2018/05/23 22:17 編集

    何か同じエラーを聞いている人もいますが、👇自分の手元では問題なく表示できているので、、、

    https://stackoverflow.com/questions/42660013/setenabledtextcheckingtypes-unrecognized-selector-sent-to-instance

    ビルドは通っているんですよね。

    キャンセル

  • 2018/05/23 22:24

    新規のプロジェクトに最低限のコードを書いて実行できるかどうか試してもらえますか?

    キャンセル

  • 2018/05/23 22:26

    自分が試した最低限のコードを回答に追記しときました。

    キャンセル

  • 2018/05/23 22:45

    別プロジェクトと、同画面の一番表の階層のlabelで試したところ、どちらも成功しました!
    ということは、tableviewcellクラスのsetCellで行っているのがまずいのでしょうか。

    キャンセル

  • 2018/05/23 22:50 編集

    試しにメソッド名変えてやってみたらどうなるでしょうか?

    キャンセル

  • 2018/05/23 23:13 編集

    メソッドを変えてもクラッシュしました。
    tableviewのcellForRowAtで以下を実装してもだめでした。

    let label1 = cell.viewWithTag(10) as! TTTAttributedLabel

    label1.text = textArray[indexPath.row]
    label1.delegate = self
    label1.enabledTextCheckingTypes = NSTextCheckingResult.CheckingType.link.rawValue

    tebleview内でやることがそもそもできないわけではないのですよね?

    キャンセル

  • 2018/05/23 23:14

    やったことないの分かりません、、、
    ちょっとやってみます。

    キャンセル

  • 2018/05/23 23:27

    表示できる最低限のコードしか書いてませんが、カスタムしたセルに表示できました。
    回答に載せたので見てみてください。

    キャンセル

  • 2018/05/24 00:20

    最初_Kentarou様に指摘していただいた場所の下のModuleにプロジェクト名が入り、下のチェック欄がオンになっていたことが原因でした。
    修正すると上手く通りました。

    最初に気づければよかったのですが……💦
    大変長い間返信いただき、本当にありがとうございました!

    キャンセル

  • 2018/05/24 00:22

    👍🏻

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7228questions

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

  • Xcode

    4090questions

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