gpt4 book ai didi

objective-c - "Symbol not found"在 10.6 上测试 Mac OS X 10.7 特定代码时崩溃

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:09 24 4
gpt4 key购买 nike

我有一个应用程序使用了一些仅在 10.7 Lion 中才能找到的类。 (例如,NSFileCoordinator。)

当我的应用程序启动时,它可以使用 NSFileCoordinator 来协调对数据存储的读取访问。 (我保存为 XML。)

应用程序在 10.7 Lion 下启动正常,但在 10.6 Snow Leopard 下启动时,应用程序崩溃并显示如下错误。

我的基础 SDK 设置为 10.7,部署目标为 10.6。据我所知,我的所有代码都已正确包装,例如:

if (NSClassFromString(@"NSFileCoordinator") != nil) {
// Do something the 10.7 way
} else {
// Do something the 10.6 way
}

但出于某种原因,我仍然看到崩溃。由于Base SDK是10.7的,我在10.6下无法在Xcode下运行应用,调试困难。其他消息正在记录到控制台:

9/1/11 9:48:03 AM   [0x0-0x18018].com.me.myapp[173] dyld: Symbol not found: _OBJC_CLASS_$_NSFileCoordinator
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] Referenced from: /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
9/1/11 9:48:03 AM [0x0-0x18018].com.me.myapp[173] in /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp

还有崩溃报告:

Process:         myapp [137]
Path: /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
Identifier: com.me.myapp
Version: 1.5.0 (150)
Code Type: X86-64 (Native)
Parent Process: launchd [92]

Date/Time: 2011-09-01 09:40:32.591 -0400
OS Version: Mac OS X 10.6.8 (10K549)
Report Version: 6

Interval Since Last Report: 2009 sec
Crashes Since Last Report: 5
Per-App Crashes Since Last Report: 5
Anonymous UUID: 32784C79-0821-471E-BCBF-BE5874774075

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0

Dyld Error Message:
Symbol not found: _OBJC_CLASS_$_NSFileCoordinator
Referenced from: /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp
Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
in /Volumes/Macintosh HD/Users/Me/Library/Developer/Xcode/DerivedData/Mac-ebdxgdvcqfnptlftkreamrwdxetd/Build/Products/Debug/myapp.app/Contents/MacOS/myapp

最佳答案

@Anomie 的答案是正确的,但让我进一步展开。这是与您正在执行的操作类似的命令行工具的代码:

int main (int argc, const char * argv[])
{
@autoreleasepool {
if (NSClassFromString(@"NSFileCoordinator")) {
NSLog(@"Version >= 10.7");
} else {
NSLog(@"Version < 10.7");
}
}

return 0;
}

该程序链接到的唯一框架是 Foundation。但是为了弱链接到这个框架,你必须做以下事情:

  1. 在项目浏览器中点击项目
  2. 转到“构建阶段”
  3. 转到“Link Binary With Libraries”并删除“Foundation.framework”
  4. 转到“Build Settings”并添加以下“Other Linker Flags”:

    -weak_framework 基础

重建您的项目。我已经在 OS X 10.6 和 10.7 上进行了测试,但都没有崩溃,而且都产生了预期的输出。希望这会有所帮助。

关于objective-c - "Symbol not found"在 10.6 上测试 Mac OS X 10.7 特定代码时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com