SWIFT OS X - 闭包语句中的多个语句,调试工具?
SWIFT OS X - multiple statements inside a closure statement, a debugging tool?
我正在使用以下代码过滤大型数组:
var arrayOfSelectedRowDetails = self.projectRowDetails.filter(
{ [=12=].projectNumber == self.projectNumberArray[selectedRow] }
)
通常代码 运行 没问题,我没有任何问题。但是在一种情况下(在我从持久存储中删除了一些管理对象之后)然后重新 运行 代码我在 [=29] 处收到 EXC_BAD_ACCESS (code = 1, address=0x0) 错误=]时间。
我设置了一个break,单步执行了这个语句的运行时间。它是一个从核心数据实体(使用获取语句)构建的大型数组 - 因此需要很长时间。当我单步执行前十几个代码时,索引代码 运行 没问题 - 当我删除中断并让它 运行 时,它会显示错误。
是否可以从闭包语句中打印ln() 来协助调试?我尝试了多种不同的语法,但无法正常工作。
或者,是否可以在闭包中设置错误捕获语句,以便代码通过 break 或 abort() 语句停止?
从根本上说,我试图在错误发生时识别数组的索引,以便我可以获得足够的信息来调试删除函数(我认为这是错误所在)。发生错误时,我似乎无法从我可用的信息中确定索引。
这是我第一次尝试在 Swift 中编程并使用闭包,所以我边学边学。抱歉,如果我问的是基本问题。我无法在此处的其他地方找到类似的问题并提供有效的答案。
您可以在 Xcode 中设置异常断点(示例请参见 here)。
此外,我建议您将对 self.projectNumberArray 的访问移出闭包:
let pn = self.projectNumberArray[selectedRow]
var arrayOfSelectedRowDetails = self.projectRowDetails.filter(
{ [=10=].projectNumber == pn }
)
更改可能无法解决问题,但至少可以帮助调试。
最后,如果你想打印索引,下面的方法可能会奏效:
let pn = self.projectNumberArray[selectedRow]
var index = 0
var arrayOfSelectedRowDetails = self.projectRowDetails.filter(
{ println(index++); return [=11=].projectNumber == pn }
)
我正在使用以下代码过滤大型数组:
var arrayOfSelectedRowDetails = self.projectRowDetails.filter(
{ [=12=].projectNumber == self.projectNumberArray[selectedRow] }
)
通常代码 运行 没问题,我没有任何问题。但是在一种情况下(在我从持久存储中删除了一些管理对象之后)然后重新 运行 代码我在 [=29] 处收到 EXC_BAD_ACCESS (code = 1, address=0x0) 错误=]时间。
我设置了一个break,单步执行了这个语句的运行时间。它是一个从核心数据实体(使用获取语句)构建的大型数组 - 因此需要很长时间。当我单步执行前十几个代码时,索引代码 运行 没问题 - 当我删除中断并让它 运行 时,它会显示错误。
是否可以从闭包语句中打印ln() 来协助调试?我尝试了多种不同的语法,但无法正常工作。
或者,是否可以在闭包中设置错误捕获语句,以便代码通过 break 或 abort() 语句停止?
从根本上说,我试图在错误发生时识别数组的索引,以便我可以获得足够的信息来调试删除函数(我认为这是错误所在)。发生错误时,我似乎无法从我可用的信息中确定索引。
这是我第一次尝试在 Swift 中编程并使用闭包,所以我边学边学。抱歉,如果我问的是基本问题。我无法在此处的其他地方找到类似的问题并提供有效的答案。
您可以在 Xcode 中设置异常断点(示例请参见 here)。
此外,我建议您将对 self.projectNumberArray 的访问移出闭包:
let pn = self.projectNumberArray[selectedRow]
var arrayOfSelectedRowDetails = self.projectRowDetails.filter(
{ [=10=].projectNumber == pn }
)
更改可能无法解决问题,但至少可以帮助调试。
最后,如果你想打印索引,下面的方法可能会奏效:
let pn = self.projectNumberArray[selectedRow]
var index = 0
var arrayOfSelectedRowDetails = self.projectRowDetails.filter(
{ println(index++); return [=11=].projectNumber == pn }
)