gpt4 book ai didi

objective-c - Swift/Objective-C/Applescript 项目中无法识别的选择器

转载 作者:搜寻专家 更新时间:2023-11-01 06:31:32 24 4
gpt4 key购买 nike

在运行这个与 Swift 接口(interface)的简单 ASObjc 程序时,我收到以下消息:

 *** -[ASMyObject foo:]: unrecognized selector sent to object <ASMyObject @0x60c000226fe0: OSAID(4) ComponentInstance(0x810000)>

如果我从 foo 中删除参数,代码将按预期工作。我意识到我使用参数创建 foo 的方式一定有问题。

这是基于 this answer 的代码:

AppDelegate.swift

func applicationDidFinishLaunching(_ aNotification: Notification) {
ASObjC.shared().myObject.foo(5)
}

ASMyObject.applescript

script ASMyObject
property parent : class "NSObject"

on foo(value)
log value * 2
return "Success!"
end foo

end script

ASObjC.h

@import Cocoa;
@import AppleScriptObjC;

@interface NSObject (MyObject)
- (NSString *)foo:(int)value;
@end

@interface ASObjC : NSObject
+ (ASObjC *)shared;
@property NSObject * MyObject;
@end

ASObjC.m

#import "ASObjC.h"

@implementation ASObjC

+ (void)initialize
{
if (self == [ASObjC class]) {
[[NSBundle mainBundle] loadAppleScriptObjectiveCScripts];
}
}

+ (ASObjC *)shared
{
static id shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [[ASObjC alloc] init];
});

return shared;
}

- (instancetype)init
{
self = [super init];
if (self) {
_MyObject = [NSClassFromString(@"ASMyObject") new];
}
return self;
}

@end

桥接头.h

#import "ASObjC.h"

最佳答案

在 ObjC 中你必须添加一个下划线字符来表示冒号

on foo_(value)
log value * 2
return "Success!"
end foo

或者

on foo:value
log value * 2
return "Success!"
end foo

并且在类别中您必须声明传递对象的方法,ObjC 原语不起作用。

- (NSString *)foo:(NSNumber *)value;

要在 AppleScript 端分配值,您必须强制执行它

on foo:value
log (value as integer) * 2
return "Success!"
end foo

关于objective-c - Swift/Objective-C/Applescript 项目中无法识别的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657919/

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