2

我们有一个使用 Storyboard 的 UIKit 应用程序的 Swift 项目。一切都很好,直到我决定将应用程序的最低部署目标降低到 iOS 7。在构建应用程序时,我在 ibtool 中点击了一个断言,它试图编译故事板。错误是这样的:

2015-06-12 11:49:07.216 ibtoold[41058:6974134] [MT] DVTAssertions: ASSERTION FAILURE in /SourceCache/IDEInterfaceBuilder/IDEInterfaceBuilder-7702/InterfaceBuilderKit/Connections/IBConnection.m:182
Details:  Source and destination must be unique
Object:   <IBCocoaTouchStoryboardPushSegue: 0x7fdea9bce8a0>
Method:   -setDestination:
Thread:   <NSThread: 0x7fdea2c07820>{number = 1, name = main}
Hints: None
Backtrace:
  0  0x00000001015e0147 -[DVTAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in DVTFoundation)
  1  0x00000001015dfb9f _DVTAssertionHandler (in DVTFoundation)
  2  0x00000001015dfe8e _DVTAssertionFailureHandler (in DVTFoundation)
  3  0x00000001023ff472 -[IBConnection setDestination:] (in IDEInterfaceBuilderKit)
  4  0x00000001023fe5c9 +[IBConnection connectionWithSource:label:andDestination:] (in IDEInterfaceBuilderKit)
  5  0x00000001086aa798 (in IDEInterfaceBuilderCocoaTouchIntegration)
  6  0x0000000108704abb (in IDEInterfaceBuilderCocoaTouchIntegration)
  7  0x0000000102481472 -[IBDocument updateConnectionsAfterEnablingOrDisablingConfigurations] (in IDEInterfaceBuilderKit)
  8  0x0000000102482194 __35-[IBDocument disableConfigurations]_block_invoke (in IDEInterfaceBuilderKit)
  9  0x0000000102481beb -[IBDocument maintainCanvasCentersWhileTransformingCanvasPositions:] (in IDEInterfaceBuilderKit)
 10  0x000000010248209c -[IBDocument disableConfigurations] (in IDEInterfaceBuilderKit)
 11  0x000000010868852c (in IDEInterfaceBuilderCocoaTouchIntegration)
 12  0x0000000102497469 -[IBDocumentAutolayoutManager runBlockInNewArbitrationStackEntryWithBehavior:block:] (in IDEInterfaceBuilderKit)
 13  0x000000010247de2b -[IBDocument modifyViewsInAutolayoutSafeWayDuring:] (in IDEInterfaceBuilderKit)
 14  0x00000001086884e2 (in IDEInterfaceBuilderCocoaTouchIntegration)
 15  0x000000010865d1e5 (in IDEInterfaceBuilderCocoaTouchIntegration)
 16  0x000000010244628f -[IBDocument finishChangingTargetRuntimeInCompiledIntermediateDocument] (in IDEInterfaceBuilderKit)
 17  0x00000001024a5811 __85-[IBDocumentCompiler invokeWithIntermediateDocumentOfTargetRuntime:alwaysCopy:block:]_block_invoke (in IDEInterfaceBuilderKit)
 18  0x00000001024a55a9 -[IBDocumentCompiler invokeWithIntermediateDocument:] (in IDEInterfaceBuilderKit)
 19  0x00000001024a574d -[IBDocumentCompiler invokeWithIntermediateDocumentOfTargetRuntime:alwaysCopy:block:] (in IDEInterfaceBuilderKit)
 20  0x00000001026aa61c -[IBStoryboardDocumentCompiler compileWithOptions:error:] (in IDEInterfaceBuilderKit)
 21  0x00000001024a5937 +[IBDocumentCompiler compileContentsOfDocument:options:error:] (in IDEInterfaceBuilderKit)
 22  0x0000000102460550 __47-[IBDocument compiledPackageWithOptions:error:]_block_invoke (in IDEInterfaceBuilderKit)
 23  0x0000000102498ee5 -[IBDocumentAutolayoutManager assertIfArbitrationIsScheduledDuring:] (in IDEInterfaceBuilderKit)
 24  0x00000001024604a7 -[IBDocument compiledPackageWithOptions:error:] (in IDEInterfaceBuilderKit)
 25  0x00000001013e9f0a (in ibtoold)
 26  0x00000001013e6b40 (in ibtoold)
 27  0x00000001013e9370 (in ibtoold)
 28  0x00000001013ef233 (in ibtoold)
 29  0x00000001013ef7b0 (in ibtoold)
 30  0x00000001013ef683 (in ibtoold)
 31  0x00000001013de60a (in ibtoold)
 32  0x00000001013eee2c (in ibtoold)
 33  0x00000001013ee074 (in ibtoold)
 34  0x00007fff9289f5c9 start (in libdyld.dylib)
 35  0x0000000000000002
Command /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool failed with exit code 255

我检查了所有的segues(它们很多),但我似乎没有发现有什么问题。此外,当最小部署目标是 8.x 时,也没有问题。

4

1 回答 1

0

注意- 这一切都源于手动将引用出口添加到 UI 元素。不久后我发现我不需要这样做,而不是简单地添加 aTAG就是我所需要的,因为我只是希望能够以编程方式访问元素以隐藏/显示它(我可以通过 Tag 从iPhone SDK?)。

反正...

不知道这是否一定适用于 OP,但也许它会帮助 googler:

当我通过直接编辑 's XML 而不是使用界面构建器在情节提要中手动添加引用出口时,我遇到了这个错误。.xib

原因:我想为我拥有的标签添加一个引用出口。但是,当我在界面构建器中使用“新引用插座”时,IBOutlet我想要的并没有出现在列表中。因此,我采用了“用锤子敲打它直到它起作用”的方法,并决定在 XML 中手动添加引用出口。

引用出口如下所示: <outlet property="nameOfTheVar" destination="9CH-Ow-gWo" id="8CH-Ow-hWo"/>

destination是作为插座的 UI 元素的 ID,并且id是引用插座的唯一 ID。

An<outlet>应该是元素的子<connections>元素(有意义,它将我的 UI 元素连接到IBOutlet代码中)。我<label>有一个<connections>元素,所以我在那里添加了插座。这就是导致我的Source and destination must be unique错误的原因。我想它不喜欢作为它的出口元素的子元素的出口。

因此,为了修复错误,我将作为实际 UI 元素的子元素的元素移动到<outlet>了作为该视图的子元素的元素。<connections><connections><viewController>

这是(高度缩写的)XML:

<viewController>
    <layoutGuides />
    <view>
        <subviews>
            <label id="9CH-Ow-gWo">
                <connections>
                    <!-- dont put the outlet here -->
                </connections>
            </label>
        </subviews>
    </view>
    <connections>
        <!--put the outlet here! -->
        <outlet property="nameOfTheVar" destination="9CH-Ow-gWo" id="8CH-Ow-hWo"/>
    </connections>
</viewController>
于 2016-02-16T20:26:10.543 回答