Ios Swift For In-loop未在存档中维护变量值

Ios Swift For In-loop未在存档中维护变量值,ios,swift,xcode6,Ios,Swift,Xcode6,我有一段代码,当通过Xcode直接部署到设备上时可以正常工作,但是如果我通过临时归档安装应用程序,它会失败得很惨 这是代码,它充满了日志语句,因为我无法使用调试器,所以我不得不依靠控制台输出来确定发生了什么 var status: ShipmentStatus = ShipmentStatus.NOT_READY let stopOrders = getStopOrders(true) for order in stopOrders{ NSLog("Be

我有一段代码,当通过Xcode直接部署到设备上时可以正常工作,但是如果我通过临时归档安装应用程序,它会失败得很惨

这是代码,它充满了日志语句,因为我无法使用调试器,所以我不得不依靠控制台输出来确定发生了什么

    var status: ShipmentStatus = ShipmentStatus.NOT_READY
    let stopOrders = getStopOrders(true)

    for order in stopOrders{
        NSLog("Beginning Loop Shipment Status = %d", status.toRaw())
        let stopStatus = order.getStopOrderStatus()
        NSLog("%d Stop Status = %d", order.salesOrderHeader.salesOrderNo, stopStatus.toRaw())
        if(stopStatus == StopOrderStatus.READY_FOR_PICKING || stopStatus == StopOrderStatus.PARTIALLY_PICKED){
            return ShipmentStatus.READY_FOR_PICKING
        } else if(stopStatus == StopOrderStatus.PICKING_COMPLETE){
            status = ShipmentStatus.PICKING_COMPLETE
            NSLog("Shipment Status = %d", status.toRaw())
        } else if(stopStatus == StopOrderStatus.READY_FOR_DELIVERY || stopStatus == StopOrderStatus.PARTIALLY_DELIVERED){
            if(status != ShipmentStatus.PICKING_COMPLETE){
                status = ShipmentStatus.READY_FOR_DELIVERY
                NSLog("Shipment Status = %d", status.toRaw())
            } else {
                NSLog("Shipment Status is not changed")
            }
        } else if(stopStatus == StopOrderStatus.DELIVERY_COMPLETE){
            if(status != ShipmentStatus.PICKING_COMPLETE && status != ShipmentStatus.READY_FOR_DELIVERY){
                status = ShipmentStatus.DELIVERY_COMPLETE
                NSLog("Shipment Status = %d", status.toRaw())
            } else {
                NSLog("Shipment Status is not changed")
            }
        }
    }
    NSLog("Return Shipment Status = %d", status.toRaw())
    return status
问题是,除非第一个条件匹配(即返回值作为循环的一部分),否则变量
status
始终等于
ShipmentStatus.NOT_READY
。如果我检查日志,我可以看到在每次循环迭代中,
status
也等于
ShipmentStatus。NOT_READY
,但我也可以在控制台中看到它在迭代过程中被正确设置。因此,它似乎将变量视为已在循环中声明的变量,并为每次迭代创建一个新副本

正如我提到的,只有将项目捆绑到归档中并通过空中部署时,才会发生这种情况。当直接部署到设备上时,代码按预期工作。这在iOS 7.1.2和iOS 8上都会发生。我刚刚使用Xcode 6 GM进行了测试,但问题仍然存在

有人在他们的代码中看到过这样的行为吗?奇怪的是,我有其他代码遵循类似的模式,它似乎返回了预期的值

================

为了澄清,这是我在使用Xcode部署时看到的日志输出

[7454:60b] Beginning Loop Shipment Status = 0
[7454:60b] 10000221 Stop Status = 70
[7454:60b] Shipment Status = 60
[7454:60b] Beginning Loop Shipment Status = 60
[7454:60b] 10000222 Stop Status = 70
[7454:60b] Shipment Status = 60
[7454:60b] Beginning Loop Shipment Status = 60
[7454:60b] 10000223 Stop Status = 70
[7454:60b] Shipment Status = 60
[7454:60b] Return Shipment Status = 60
当通过归档部署时,结果是

<Warning>: Beginning Loop Shipment Status = 0
<Warning>: 10000221 Stop Status = 70
<Warning>: Shipment Status = 60
<Warning>: Beginning Loop Shipment Status = 0
<Warning>: 10000222 Stop Status = 70
<Warning>: Shipment Status = 60
<Warning>: Beginning Loop Shipment Status = 0
<Warning>: 10000223 Stop Status = 70
<Warning>: Shipment Status = 60
<Warning>: Return Shipment Status = 0
:开始循环装运状态=0
:10000221停止状态=70
:装运状态=60
:开始循环装运状态=0
:10000222停止状态=70
:装运状态=60
:开始循环装运状态=0
:10000223停止状态=70
:装运状态=60
:退货装运状态=0

> p>好的,问题解决了,但是我使用了我所考虑的解决方案,因为我假设问题的本质,并且当应用程序通过XCODE部署这个程序时,它不会引起问题,这是包生成器中的一个错误。
ShipmentStatus的枚举定义与此函数在同一Swift文件中定义。因此,我将枚举移到一个单独的文件中,嘿,普雷斯托,这个问题消失了。

很难知道实际的问题是什么,但从您所说的,这不是一个Swift问题,而是一个导致order.getStopOrderStatus()失败的部署问题(基于您自己的帐户和逻辑)。order.getStopOrderStatus()正在返回预期结果。因此,它正下方的log语句显示了每个订单的预期值。我还可以在日志中看到正在分配状态,然后日志显示状态具有预期值。然而,在循环的下一次迭代中,状态被重置回原始值,并且在循环运行之后,返回的结果总是原始值。这很奇怪——会有差异。我还没有完成临时归档安装,但您是否可以使用旧的运行时?您是否也有一个名为status的类属性?