将CTFrame追加到Swift数组时出现问题

将CTFrame追加到Swift数组时出现问题,swift,core-text,Swift,Core Text,我有一个在Objective-C中工作的CoreText,迁移到Swift让我抓狂 这是简化代码: var ctFramesArray: Array<CTFrame> = CTFrame[]() ctFramesArray.append(ctFrame) 当ctFramesArray在函数中是本地变量时,ctFramesArray.appendctFrame行可以正常工作,但如果它是全局变量,则会出现运行时EXEC_BAD_指令错误 我使用一个字符串数组进行了测试,如下所示,它与

我有一个在Objective-C中工作的CoreText,迁移到Swift让我抓狂

这是简化代码:

var ctFramesArray: Array<CTFrame> = CTFrame[]()

ctFramesArray.append(ctFrame)
当ctFramesArray在函数中是本地变量时,ctFramesArray.appendctFrame行可以正常工作,但如果它是全局变量,则会出现运行时EXEC_BAD_指令错误

我使用一个字符串数组进行了测试,如下所示,它与本地或全局声明的数组一起工作。问题似乎与CTFrame类型有关。CTFrame对象有效且帧渲染正确

    var stringsArray: Array<String> = Array<String>()
    stringsArray.append("One")
    println(stringsArray.count)

有什么线索吗?

可能是与CTFrame的ARC ref计数有关的问题。您是如何获得ctFrame的?我怀疑ctFrame的使用寿命比ctFramesArray短,这会导致崩溃。

我找到了解决问题的方法

如果全局变量ctFramesArray被全局定义为CTFrame对象数组,那么我们将得到运行时错误。但是,如果数组定义为AnyObject的数组,如下所示,那么问题就解决了:

var ctFramesArray: Array<AnyObject> = Array<AnyObject>()
CTFrame对象中的AnyObject兼容性似乎存在问题

令人费解的是,当数组在本地声明为array时,声明工作得很好


。。。e

用户3670399。我怀疑这是ctFrame对象的生命周期问题,因为ctFrame对象是在同一个函数中创建的,使用:let ctFrame=CTFrameSetterCreateFrameSetter,CFRangeMaketextPosition,0,path,nil;我可以在尝试将LNCTFrame添加到阵列之前打印它。iii.array.appendctFrame有效是指数组在同一函数中声明为非全局。这真奇怪
var ctFramesArray: Array<AnyObject> = Array<AnyObject>()