绘制时有些属性字符串会崩溃

时间:2014-10-16 21:07:21

标签: ios swift draw nsattributedstring

我正在尝试使用Xcode 6.0.1将目标字符串绘制到UIView上,其目标是iPad2 iOS 7.1

我发现有些字符串可以正常使用,但其他字符串会使应用程序崩溃。

经过多次实验,我在以下代码中找出了问题所在:

import UIKit

class myview: UIView
{

    override func drawRect(rect: CGRect)
    {
        let tick = "✓"
        let x = "t"
        let xtick="✓t"

        // try next line with c=tick, then c=x and then c=xtick

        let c=tick
        var attrs = [NSFontAttributeName : UIFont(name: "ArialRoundedMTBold",   size:54.0),NSForegroundColorAttributeName:UIColor.greenColor().CGColor]

        c.drawAtPoint(CGPointMake(80,220), withAttributes:attrs)
    }
}

使用c = tickc = xtick一切正常,但如果您let c = x应用程序崩溃。

如果您注释掉drawAtPoint行,则不会发生崩溃,因此这是触发器。

第一条崩溃讯息是:

  

- [__ NSCFType set]:无法识别的选择器发送到实例0x7aee4f00

我做错了什么或这是编译器错误?

2 个答案:

答案 0 :(得分:1)

您必须传递UIColor而不是CGColorRef,因此请移除CGColor并仅保留此内容:

var attrs = [NSFontAttributeName : UIFont(name: "ArialRoundedMTBold",   size:54.0),NSForegroundColorAttributeName:UIColor.greenColor()]

答案 1 :(得分:1)

你正在使用带有UIColor的CGColor,请将.CGColor从属性中删除它会正常工作。它在iOS 9中运行良好,但在较低版本中它不支持这就是为什么这个问题产生的。

var attrs = [NSFontAttributeName : UIFont(name: "ArialRoundedMTBold",   size:54.0),NSForegroundColorAttributeName:UIColor.greenColor()];