на работе я должен перепроектировать старое приложение.Итак, я его рефакторинг и, боже мой, приложение падает, когда я отправляю метке определенный текст.
Я смотрю его и вижу (пример), когда я отправляю метке текст "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