【发布时间】:2013-05-06 14:49:57
【问题描述】:
我正在尝试使用关联对象(一个 NSMutableDictionary 和一个 NSNumber)在 iTunesTrack 上编写一个类别
#import "iTunes.h"
#import <objc/runtime.h>
@interface iTunesTrack (dictionary)
- (NSMutableDictionary*) getDictionary;
- (NSNumber*) getScan;
- (BOOL)scanTrack:(NSString *)equationString;
@end
这失败了:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_iTunesTrack", referenced from:
l_OBJC_$_CATEGORY_iTunesTrack_$_dictionary in iTunesTrack+dictionary.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已经仔细检查了是否添加了 Scripting Bridge 框架以及是否已将 iTunesTrack+dictionary.m 文件附加到目标。将类别与脚本桥结合起来会不会是一些错误?
更新:
如果我用 SBObject 替换 iTunesTrack,这可行。不过我不知道为什么。
更新 2:
这个问题是可以重现的:
- 创建新项目
- 添加脚本桥框架和 iTunes.h 头文件。
- 使用任意名称创建新的 iTunesTrack 类别
- 确保
iTunesTrack+name.h导入iTunes.h - 构建
我找到了this page,它描述了使用 NSProxy 和 NSCache 来存储 iTunesTrack 对象。这会是比尝试创建一个类别更好的解决方案吗?
【问题讨论】:
标签: objective-c cocoa objective-c-category scripting-bridge