2015-06-12 4 views
2

У нас есть проект Swift для приложения UIKit, использующего раскадровки. Все было в порядке, пока я не решил снизить минимальную цель развертывания приложения для iOS 7. При создании приложения я нажимал утверждение в ibtool, который пытается скомпилировать раскадровку. Ошибка выглядит следующим образом:Невозможно скомпилировать раскадровку для iOS 7

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 

Я проверил все перетекает (и они много), но я din't, кажется, чтобы увидеть что-то не так. Также, когда минимальная цель развертывания - 8.x, проблема не возникает.

+0

Вы trued удаление ** DerivedData **? Это может быть * просто * оставлено. – Michal

+0

Да, я удалил DerivedData и не получил никакого эффекта. – Dunbar

+0

Хм ... не могли бы вы опубликовать структуру ваших segues? Скриншот Раскадровки может быть? – Michal

ответ

0

УКАЗАНИЕ - Все это произошло из-за того, что вручную добавлена ​​ссылочная розетка к элементу пользовательского интерфейса. Я вскоре узнал, что мне НЕ нужно это делать, и isntead просто добавление TAG было всем, в чем я нуждался, поскольку я просто хотел иметь доступ к элементу программно, чтобы скрыть/показать его (Can I get the element by Tag from iPhone SDK?).

Во всяком случае ...

Не знаю, если это обязательно относится к OP, но, возможно, это поможет Googler:

Я побежал в эту ошибку, когда я был вручную добавив выход реферирования в раскадровке, отредактировав XML-код .xib напрямую, вместо использования интерфейса-построителя.

Причина: я хотел добавить ссылочную розетку на ярлык, который у меня был. Однако, когда я использовал «New Referencing Outlet» в построителе интерфейса, IBOutlet, который я хотел, не отображался в списке. Итак, я применил подход «bash it with hammer until it works» и решил вручную добавить ссылку для ссылок в XML.

Отвода реферирования выглядит следующим образом: <outlet property="nameOfTheVar" destination="9CH-Ow-gWo" id="8CH-Ow-hWo"/>

destination является идентификатором элемента пользовательского интерфейса, что это выпускное отверстие для и id является уникальным идентификатором для выхода ссылающегося.

<outlet> должен быть ребенком элемента <connections> (смысл Make, он соединяет мой элемент пользовательского интерфейса с кодом IBOutlet в коде). У моего <label> есть элемент <connections>, и поэтому я добавил туда розетку. Это то, что вызвало мой Источник и назначение должны быть уникальными error. Я думаю, что это не похоже на выход, чтобы быть ребенком элемента, для которого это выход.

Таким образом, чтобы исправить ошибку я переехал <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> 
Смежные вопросы