“Apple Mach-O链接器命令失败,退出代码为1”

时间:2012-03-21 17:08:59

标签: iphone ios multithreading

我正在尝试实现SVProgressHUD活动指示器。我将这些类复制到我的项目中,并将以下代码添加到我的appDelegate中,但无法弄清楚它崩溃的原因。

我得到他们关注错误,我不确定在哪里修复它:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SVProgressHUD", referenced from:
objc-class-ref in QuotesAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

以下是代码:

#import "SVProgressHUD.h"

@implementation QuotesAppDelegate


- (void)startLoading
{
    //call this in your app delegate instead of setting window.rootViewController to your main view controller
    //you can show a UIActivityIndiocatorView here or something if you like
    [SVProgressHUD show];
    [self performSelectorInBackground:@selector(loadInBackground) withObject:nil];
}

- (void)loadInBackground
{
    //do your loading here
    //this is in the background, so don't try to access any UI elements
    [self populateFromDatabase];

    [SVProgressHUD dismiss];

    [self performSelectorOnMainThread:@selector(finishedLoading) withObject:nil waitUntilDone:NO];
}

- (void)finishedLoading
{
    //back on the main thread now, it's safe to show your view controller
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
}


- (void)applicationDidFinishLaunching:(UIApplication *)application {

[self copyDatabaseIfNeeded];

    [self startLoading];

}

5 个答案:

答案 0 :(得分:16)

修改

我提供的答案(请参阅我的原始答案)仅解决问题,但这不是正确的解决方案。有关正确的解决方案,请参阅 Jim 回答

  

听起来SVProgressHUD.m并未针对您的目标启用。点击   它在左侧窗格的项目导航器中,然后查看   右侧窗格中的文件检查器,以确保接下来有一个勾选   到你正在建造的目标。

Parth Bhatt 链接。

为了完整起见

尝试一下,我发现当你在项目中拖放文件或目录时,Xcode(4.3.1)会要求你选择正确的选项来将这些文件或目录添加到你的项目中。确保"添加到目标"选项已被选中。

如果您错过了检查该选项,则需要执行以下步骤:

  1. 选择YourProjectName
  2. 选择TARGETS
  3. 选择构建阶段
  4. 在“编译源代码”部分添加.m类
  5. 我的原始回答

    如果您在项目中拖动这些类,则可能是问题所在。

    为避免编译错误,请使用"将文件添加到YourProjectName"代替。

    假设您有一个包含.h和.m文件的目录,名为" SVProgressHUD"在桌面上。

    现在你必须:

    1. 删除以前的文件(.h和.m)
    2. 在项目中单击鼠标右键单击
    3. 选择" SVProgressHUD" dir with"将文件添加到YourProjectName" (选择以下复选框选项:目标复制项目...和文件夹为任何人创建群组...)
    4. 希望它有所帮助。

答案 1 :(得分:2)

听起来没有为您的目标启用SVProgressHUD.m。在左侧窗格的项目导航器中单击它,然后查看右侧窗格中的文件检查器,以确保您正在构建的目标旁边有一个勾号。

答案 2 :(得分:0)

  1. 检查您是否有任何以前可以删除的对象而不知道它
  2. 检查您的所有对象是否已连接,例如,如果您有一个MapView但没有连接,则会崩溃
  3. 如果这不起作用,请尝试清理应用,或者只是重新启动iPhone和Xcode

答案 3 :(得分:0)

结帐此链接。请参阅此链接中接受的答案:

Undefined symbols for architecture i386: _OBJC_CLASS_$_SKPSMTPMessage", referenced from: error

如果仍然没有帮助,请参阅上面链接中Allen Pike的回答。尝试在您的应用中删除并添加回QuartzCore框架。

希望这会对你有所帮助。

答案 4 :(得分:-1)

I resolved this issue by changing in Player Settings in the Unity Editor.

menu path: PlayerSettings > OtherSettings > Scripting Backend change to IL2CPP from Mono2x.

Second change was to change the Architecture to universal.