Сбой приложения, когда iOS пытается переместить слова в другие строки, если он не может поместиться - PullRequest
0 голосов
/ 05 октября 2018

на работе я должен перепроектировать старое приложение.Итак, я его рефакторинг и, боже мой, приложение падает, когда я отправляю метке определенный текст.

Я смотрю его и вижу (пример), когда я отправляю метке текст "Blablabl b blablablmsgstr "и установите в метке число строк равное 0 (метка имеет фрейм 100x100), приложение аварийно завершает работу, но если я задаю для numberoflines значение 1, приложение не прерывает работу и не обрезает хвост текста, как этот" Blablabl b ... ".

Другими словами, происходит сбой приложения, когда iOS пытается переместить слова в другие строки.Итак, у меня есть несколько вопросов.Почему происходит сбой приложения.Как я могу это исправить.

Если я отправлю метке "Blablablablablalbalblablabllabl" и установлю для numberOfLines значение 0, все в порядке, и метка будет выглядеть так:

Blablablablal

balblablablla

bl

override func viewWillAppear(_ animated: Bool) {

    let tile = TileView()
    let grt = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))
    tile.frame = grt
    let tit = UILabel(frame: grt)
    tit.text = "Blablablablalbalblablabllabl"
    let but = UIButton(frame: grt)
    let ov = UIView(frame: grt)
    let im = UIImageView(frame: grt)
    let arr = [im, ov, tit, but]
    for i in arr {
        tile.addSubview(i)
    }
    tile.tileButton = but
    tile.tileTitle = tit
    tile.tileTitle.numberOfLines = 0
    tile.tileOverlay = ov
    tile.tileOverlay.backgroundColor = .black
    tile.tileOverlay.alpha = 0.5
    tile.tileImage = im
    view.insertSubview(tile, aboveSubview: collectionView)
}

TileView.swift

import UIKit
import Foundation

protocol TileDelegate: class {
    func tapOnTile(with item: AppDesign.Screens.Main.ButtonItem)
}

class TileView: UIView {

    @IBOutlet weak var tileImage: UIImageView!
    @IBOutlet weak var tileOverlay: UIView!

    @IBOutlet weak var tileTitle: UILabel!

    @IBOutlet weak var tileButton: UIButton!

    weak var delegate: TileDelegate?

    fileprivate var block: AppDesign.Screens.Main.ButtonItem!

    @objc fileprivate func clickOnButton(_ sender: UIButton) {
        delegate?.tapOnTile(with: block)
    }

    public func fillTile(with item: AppDesign.Screens.Main.ButtonItem) {
        block = item

        tileTitle.text = item.title

        tileOverlay.backgroundColor = item.blackout.withAlphaComponent(0.5)

        if let imageUrl = URL(string: item.image) {
            tileImage.af_setImage(withURL: imageUrl)
        }

        tileTitle.textColor = item.textColor
        layer.cornerRadius = 10
        clipsToBounds = true

        tileButton.addTarget(self, action: #selector(clickOnButton(_:)), for: .touchUpInside)

    }

}

Сначала приложение было сбой с журналом:

2018-10-01 16:25:48.132636+0300 iosProj[20881:378165] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.

2018-10-01 16:25:53.125100+0300 iosProj[20881:378165] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSPlaceholderString initWithString:]: nil argument'
libc++abi.dylib: terminating with uncaught exception of type NSException

Так что теперь просто: libc ++ abi.dylib: завершается с неисследованным исключением типа NSException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...