【问题标题】:"_OBJC_CLASS_$_viewsampleViewController", referenced from:“_OBJC_CLASS_$_viewsampleViewController”,引用自:
【发布时间】:2010-12-22 05:23:17
【问题描述】:

我创建了一个视图控制器 viewsampleViewController.. 它有两个方法 setname 和 getname.. 我为该视图控制器创建了一个测试用例。我的测试用例名称是 newTestCase,方法名称是 testName。

#import "newTestCase.h"
#import "viewsampleViewController.h"


@implementation newTestCase

在我的 testName 方法中,

-(void)testName{

 NSString *b=@"hello";
 v =[[viewsampleViewController alloc] init];
 STAssertNotNil(v,@"v doesnt created");
 [v setuname:@"hello"];
 NSString *a=[v getuname];

 STAssertEquals(b,a,@"error:name not equal");
 [v release];

}

-(void)setUp{
 v=[viewsampleViewController alloc];
}

-(void) tearDown{
 [v release];
}

当我构建时出现错误

 Ld "build/Debug-iphoneos/Unit test.octest/Unit test" normal armv6
cd /Users/anande/Documents/viewsample
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1.3
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -bundle -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk -L/Users/anande/Documents/viewsample/build/Debug-iphoneos -F/Users/anande/Documents/viewsample/build/Debug-iphoneos -F/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk/Developer/Library/Frameworks -filelist "/Users/anande/Documents/viewsample/build/viewsample.build/Debug-iphoneos/Unit test.build/Objects-normal/armv6/Unit test.LinkFileList" -dead_strip -framework Foundation -framework SenTestingKit -miphoneos-version-min=3.1.3 -o "/Users/anande/Documents/viewsample/build/Debug-iphoneos/Unit test.octest/Unit test"


Undefined symbols:
  "_OBJC_CLASS_$_viewsampleViewController", referenced from:
      __objc_classrefs__DATA@0 in newTestCase.o
ld: symbol(s) not found

collect2: ld returned 1 exit status

请帮帮我,

【问题讨论】:

标签: iphone objective-c unit-testing


【解决方案1】:

由于架构依赖而出现此链接器问题。实际上,当我们从其他来源将一些文件添加到我们的项目时,可能会出现没有建立确切的依赖关系。所以编译器生成链接器错误。我按照以下步骤解决了这个问题:

  1. 选择目标
  2. 选择构建阶段
  3. 选择编译源
  4. 选择 + 图标
  5. 选择您遇到错误的 .m 文件并添加它。
  6. 清理构建并再次运行。

【讨论】:

    【解决方案2】:

    这是一个链接器错误,请将 viewsampleViewController.m 添加到您的测试目标。 请以大写开头的类名,使所有内容更具可读性

    【讨论】:

    • 感谢马丁.. 当我添加我的 .m 文件来测试目标时,它可以工作.. 非常感谢....但是马丁。在苹果教程中描述了一旦我添加了依赖项,就不需要添加 .m 文件来测试目标。我添加依赖项。那为什么不行呢
    • 如果您正在开发一个静态库,那么您可以将您的库添加为测试包目标上的“其他链接器标志”构建设置。但是,您正在测试应用程序 viewController,因此您必须在测试目标中包含实现文件以进行编译。它无法链接到应用程序包。对于静态库,您可以在库前加上 -l。要告诉编译器查找名为 MyStaticLib.a 的静态库,请将“-lMyStaticLib”添加到测试目标构建设置中的“Other Linker Flags”中。
    • 谢谢你,对我帮助很大
    • 不必必须在测试目标中包含您的实现文件——即使您正在制作一个应用程序包。见twobitlabs.com/2011/06/…
    • 我认为最初的答案只有在 Xcode 3.x 之后才有效,之后苹果更改了构建系统。
    【解决方案3】:

    viewsampleViewController.m 文件不知何故没有被编译。确保它是项目的一部分。

    【讨论】:

    • 感谢马丁.. 当我添加我的 .m 文件来测试目标时,它可以工作.. 非常感谢....但是马丁。在苹果教程中描述了一旦我添加了依赖项,就不需要添加 .m 文件来测试目标。我添加依赖项。那为什么不行呢
    【解决方案4】:

    我遇到了同样的问题,我对项目的来源进行了一些更改。 所有 .m 都更改为 .mm ,由于某种原因,在“使用库链接二进制文件”中没有添加有问题的特定类,而是在“复制捆绑资源”中。在我改变它之后它工作了。

    这就是我所做的:

    1) 单击 Xcode 左上角的蓝色项目选项卡。 2) 转到“目标”选项。 3) 转到“构建阶段”选项卡。 4) 转到“复制捆绑资源”。 5) 查找实现文件 (.m, .mm),如果存在,请单击减号 (-) 选项将其删除。 6) 转到“编译源代码”并单击加号 (+) 选项并添加该实现文件。 7) 编译并点击它,兄弟,你很高兴。

    希望这会有所帮助。 干杯。

    【讨论】:

      【解决方案5】:

      虽然将应用的 .m 文件直接添加到测试目标可以解决问题,但这是多余且不必要的。按照the steps outlined here by Two Bit Labs 让它工作。总而言之,请确保您的……

      1. 测试目标的Bundle Loader 构建设置指向您应用的包。
      2. 测试目标的 Test Host 构建设置指向您应用的包。
      3. 应用目标的 Symbols Hidden by Default 构建设置是 NO

      【讨论】:

        猜你喜欢
        • 2014-01-10
        • 2020-01-17
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2017-06-28
        • 2021-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多