gpt4 book ai didi

objective-c - 将问题与 Scripting Bridge 上的类别链接

转载 作者:行者123 更新时间:2023-12-03 16:46:37 27 4
gpt4 key购买 nike

我正在尝试在 iTunesTrack 上编写一个带有关联对象(一个 NSMutableDictionary 和一个 NSNumber)的类别

#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:

这个问题是可以重现的:

  1. 创建新项目
  2. 添加脚本桥框架和 iTunes.h 头文件。
  3. 使用任意名称创建 iTunesTrack 的新类别
  4. 确保 iTunesTrack+name.h 导入 iTunes.h
  5. 构建

我找到了this page其中描述了使用 NSProxy 和 NSCache 来存储 iTunesTrack 对象。这会是比尝试创建一个类别更好的解决方案吗?

最佳答案

Scripting Bridge 相当困惑。

iTunesTrack 类实际上在底层被称为 ITunesTrack
我认为它们与前导小写 i 不太一致。

这就是为什么他们在一段时间后更改了它,但可能不想在头文件中这样做,以免更改他们的 API。

我认为没有办法解决这个问题。

但是,您可以仅在 SBObject 上创建类别。

// The interface can be declared as iTunesTrack
@interface iTunesTrack (Additions)
...
@end

// The category MUST be implemented on SBObject
@implementation SBObject (Additions)
...
@end
<小时/>

注意

请注意,该类别在每个 SBObject 上都可用,因此请确保所有属性和方法都具有唯一的接口(interface)。

关于objective-c - 将问题与 Scripting Bridge 上的类别链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401329/

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