可以在Obj C中链接,找不到符号而且不会在Swift中链接

时间:2015-07-05 21:39:25

标签: ios xcode linker

我正在努力将其他人从Obj C编写的iOS项目转换为Swift。

Obj C表单中的项目构建并运行良好,并显示它在x86_64架构下。

当我尝试在Swift中构建时,我收到错误'架构x86_64的未定义符号'。消息是:

Undefined symbols for architecture x86_64:
  "_DRCollectionViewTableLayoutSupplementaryViewColumnHeader", referenced from:
      __TFC13CVTableLayout14ViewController11viewDidLoadfS0_FT_T_ in ViewController.o
      __TFC13CVTableLayout14ViewController32collectionViewTableLayoutManagerfS0_FTGSQCSo34DRCollectionViewTableLayoutManager_14collectionViewGSQCSo16UICollectionView_19headerViewForColumnSu9indexPathGSQCSo11NSIndexPath__GSQCSo24UICollectionReusableView_ in ViewController.o

引用的值在DRCollectionViewTableLayout.h中定义,在#import和@class行之间定义,如下所示:

/**
*  Supplementary View kind for column headers


*/
static NSString * const DRCollectionViewTableLayoutSupplementaryViewColumnHeader = @"DRCollectionViewTableLayoutSupplementaryViewColumnHeader";

/**
 *  Supplementary View kind for row headers
 */
static NSString * const DRCollectionViewTableLayoutSupplementaryViewRowHeader = @"DRCollectionViewTableLayoutSupplementaryViewRowHeader";

我的桥接头文件就位了,看起来像这样:

#import "DRCollectionViewTableLayout.h"
#import "DRCollectionViewTableLayoutManager.h"

我的viewDidLoad引用了这些常量如下:

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: DRCollectionViewTableLayoutSupplementaryViewColumnHeader, withReuseIdentifier: collectionViewHeaderIdentifier)

    collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: DRCollectionViewTableLayoutSupplementaryViewRowHeader, withReuseIdentifier: collectionViewHeaderIdentifier)


    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: collectionViewCellIdentifier)

    let collectionViewLayout = DRCollectionViewTableLayout(delegate: self.collectionManager)
    collectionViewLayout.horizontalSpacing = 5.0
    collectionViewLayout.verticalSpacing = 5.0
    collectionView.collectionViewLayout = collectionViewLayout
    collectionView.dataSource = collectionManager
    collectionView.delegate = collectionManager
}

我的.m文件和.swift在目标中。

我删除了DerivedData。

我正在使用xcode 6.3.2

为什么它不会链接的任何想法?

1 个答案:

答案 0 :(得分:0)

如果我重新声明swift文件中的常量,问题就会消失。我认为问题是"静态"在Obj C文件中使用。所以我把它添加到我的视图控制器。我不确定这是最好的方法,但经过两天的尝试,我会选择它:

let DRCollectionViewTableLayoutSupplementaryViewColumnHeader = "DRCollectionViewTableLayoutSupplementaryViewColumnHeader"
let DRCollectionViewTableLayoutSupplementaryViewRowHeader = "DRCollectionViewTableLayoutSupplementaryViewRowHeader"