Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift/Objective-C/Applescript项目中无法识别的选择器_Objective C_Swift_Applescript_Applescript Objc - Fatal编程技术网

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

Swift/Objective-C/Applescript项目中无法识别的选择器,objective-c,swift,applescript,applescript-objc,Objective C,Swift,Applescript,Applescript Objc,在运行这个与Swift接口的简单ASObjc程序时,我收到以下消息: *** -[ASMyObject foo:]: unrecognized selector sent to object <ASMyObject @0x60c000226fe0: OSAID(4) ComponentInstance(0x810000)> ASMyObject.applescript script ASMyObject property parent : class "NSObject" on

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

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

嘿,瓦迪安!很高兴在这里见到你。在这两种情况下,我现在得到一个EXC_BAD_访问错误代码1。太棒了!非常感谢几年前的帮助和原始答案:
on foo:value
    log (value as integer) * 2
    return "Success!"
end foo