我正在尝试使用关联对象(一个 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:
这个问题是可以重现的:
- 创建新项目
- 添加 Scripting Bridge Framework 和 iTunes.h 头文件。
- 使用任意名称创建新类别的 iTunesTrack
- 确保
iTunesTrack+name.h
进口iTunes.h
- 建造
我发现这个页面描述了使用 NSProxy 和 NSCache 来存储 iTunesTrack 对象。这会比尝试创建一个类别更好吗?