声明变量时EXC_BAD_ACCESS

时间:2017-06-11 17:47:11

标签: swift exc-bad-access

正如我所说,当我声明一个变量时,我收到一个错误。我无法在Google和Swift文档上找到任何解决方案。 下面是代码:

Select C.*
      ,A.CODEID
 From YourTable A
 Cross Apply (
                Select RetSeq = Row_Number() over (Order By (Select null))
                      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
                From  (Select x = Cast('<x>' + replace((Select replace(A.[CODE],'!','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
                Cross Apply x.nodes('x') AS B(i)
             ) B
 Cross Apply (
                Select Code1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
                      ,Code2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
                      ,Code3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
                      ,Code4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
                      ,Code5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
                      ,Code6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
                      ,Code7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
                From  (Select Cast('<x>' + replace((Select replace(B.RetVal,'~','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
             ) C

如果我删除了collectProgress,则会在collectProgress上发生错误访问。两个变量都只是声明而不是写入或读取。即使我删除了collectProgress变量,下一个变量也会出现相同的错误。

2 个答案:

答案 0 :(得分:0)

&lt; p&gt;您收集和收集的两个变量未正确设置。您已声明&lt; code&gt;已收集&lt; / code&gt;是一个字符串,其字符串为String,值为&lt; code&gt; [String:Int]&lt; / code&gt;但是您尝试使用&lt; code&gt; [Any:Any]&lt; / code&gt;类型的字典对其进行初始化。我不确定为什么甚至会编译。 &LT; / p为H. &lt; p&gt;尝试将您的代码更改为:&lt; / p&gt; &lt; pre&gt;&lt; code&gt; var collecting = [String:[String:Int]]() private var collectProgress = [String:[String:Int]]() &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;使用该代码为这些变量创建初始值,并让编译器自动计算出它们的类型数据类型。&lt; / p&gt; &lt; p&gt;您可能还想为&lt; code&gt;创建一个typealias [String:[String:Int]&lt; / code&gt;型:其中/ p为H. &lt; pre&gt;&lt; code&gt; typealias DictOfDicts = [String:[String:Int]] // ... var collect = DictOfDicts() private var collectProgress = DictOfDicts() &LT; /代码&GT;&LT; /预&GT;

答案 1 :(得分:0)

我解决了这个问题。如果这是错误,我不是100%确定,但现在没有EXC_BAD_ACCESS。 我在Database()中添加了一个sharedInstance,并用Database.sharedInstance替换了其他Classes / Objects中的Database()。现在所有对象都使用相同的对象。 数据库中的接收者(SocketIOManager.sharedInstance.on(“”){})可能是问题所在。因为它们接收变量的新值以及更多值,但是在评论时也发生了错误。 我希望你不会得到与我的代码相同的错误/问题。

也谢谢你的帮助。

Fixed code on Github