首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么NSAppleScript的compileAndReturnError总是成功?

为什么NSAppleScript的compileAndReturnError总是成功?
EN

Stack Overflow用户
提问于 2009-06-04 02:54:10
回答 1查看 499关注 0票数 2

假设NSAppleScript对象总是在主线程上运行,我创建了一个小的“代理”对象来使用:

代码语言:javascript
复制
@interface AppleScriptProxy : NSObject {
    NSAppleScript *m_script;
    NSDictionary *m_errorDict;
}

- (id) init;

- (void) compileScript:
    (NSString*)script;

- (void) dealloc;

- (NSDictionary*) errorDict;

- (BOOL) failed;

- (void) runScript:
    (id)notUsed;

@end

@implementation AppleScriptProxy

- (id) init
{
    self = [super init];
    m_errorDict = nil;
    m_script = nil;
    return self;
}

- (void) dealloc
{
    //[m_errorDict release];
    [m_script release];
    [super dealloc];
}

- (void) compileScript:
    (NSString*)source
{
    m_script = [[NSAppleScript alloc] initWithSource:source];
    if ( m_script )
        if ( [m_script compileAndReturnError:&m_errorDict] ) {
            cerr << "compiled" << endl;
            [m_script retain];
        } else {
            cerr << "not compiled" << endl;
            m_script = nil;
        }
}

- (NSDictionary*) errorDict
{
    return m_errorDict;
}

- (BOOL) failed
{
    return !m_script || m_errorDict;
}

- (void) runScript:
    (id)notUsed
{
    [m_script executeAndReturnError:nil];
}

@end

然后,编译并执行AppleScript:

代码语言:javascript
复制
NSString *const script = /* some script */;

[proxy
    performSelectorOnMainThread:@selector(compileScript:)
    withObject:script waitUntilDone:YES];

if ( [proxy failed] ) {
    NSDictionary *errorDict = [proxy errorDict];
    NSString const *const errorMsg = errorDict ?
        [errorDict objectForKey:NSAppleScriptErrorMessage] :
        @"NSAppleScript initWithSource failed";
    cerr << [errorMsg UTF8String] << endl;
    return 1;
}

[proxy retain];
[proxy
    performSelectorOnMainThread:@selector(runScript:)
    withObject:nil waitUntilDone:NO];
[proxy autorelease];

如果我编译一个有效的脚本,它可以正常工作;但是,如果我编译一个胡言乱语的脚本,例如"foo",compileAndReturnError不会失败,也就是说,它返回YES,而m_errorDict仍然是nil

为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-04 04:08:27

在脚本编辑器中尝试。“foo”编译得很好,只是不能运行。

尝试将“*”作为您的编译测试脚本。

顺便说一句,运行脚本也会引发错误(如脚本编辑器中所示)。确保你能处理好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/948380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档