0

私はこれに慣れていないので、ご容赦ください。私の問題は次のコードにあります。

AppleScriptController.h

#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>        
@interface AppleScriptController : NSObject    
-(void)test;
@end

AppleScriptController.m

#import "AppleScriptController.h"    
@implementation AppleScriptController

-(void)test{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"beep" 
                                                 ofType:@"scpt"];    
    NSAppleScript *script2 = [[NSAppleScript alloc]
                          initWithContentsOfURL:[NSURL fileURLWithPath:path] 
                          error:nil];    
    [script2 executeAndReturnError:nil];    
}
@end

(beep.scpt のコピーはサポート ファイルにあります)

main.m

#import <Foundation/Foundation.h>
#import "AppleScriptController.h"

AppleScriptController *myScript = [[AppleScriptController alloc] init];
[myScript test];

実行すると、次のエラー メッセージが表示されます: Thread 1: Program received signal: "SIGABRT"

NSAppleScript *script2 = [[NSAppleScript alloc]
                          initWithContentsOfURL:[NSURL fileURLWithPath:path] 
                          error:nil];    Thread 1: Program received signal: "SIGABRT"

次のエラーコードを取得します。

2013-01-02 23:09:09.269 Test8[1627:707] アプリ終了

キャッチされない例外「NSInvalidArgumentException」が原因で、

reason: ' * -[NSURL initFileURLWithPath:]: nil 文字列

パラメータ'

*最初のスロー コール スタック:

(

0 CoreFoundation 0x00007fff8db7df56 __exceptionPreprocess + 198

1 libobjc.A.dylib 0x00007fff95dfbd5e objc_exception_throw + 43

2 CoreFoundation 0x00007fff8db7dd8a +[NSException raise:format:arguments:] + 106

3 CoreFoundation 0x00007fff8db7dd14 +[NSException raise:format:] + 116

4 Foundation 0x00007fff8fd6ae40 -[NSURL(NSURL) initFileURLWithPath:] + 78

5 Foundation 0x00007fff8fd6add9 +[NSURL(NSURL) fileURLWithPath:] + 47

6 Test8 0x0000000100000d9d -[AppleScriptController テスト] + 205

7 Test8 0x0000000100000cac メイン + 108

8 Test8 0x0000000100000c34 開始 + 52

9??? 0x0000000000000001 0x0 + 1

)

呼び出されて終了し、例外をスローしますsharedlibrary apply-load-rules all

現在の言語: auto; 現在、目的の c

(gdb)

m-file を initWithSource に変更すると、プログラムは正常に動作します。

NSAppleScript *script1 = [[NSAppleScript alloc] initWithSource:@"beep 10"];
[script1 executeAndReturnError:nil];

OS X 10.7.5 で XCode 4.2.1 を実行しています

私が間違っていたところを教えてください。ある種の初心者の間違いだと確信していますが、見つけることができないようです。

どんなアドバイスもありがたく受け取った!

4

1 に答える 1

3

エラーコードから:

reason: '* -[NSURL initFileURLWithPath:]: nil string

だからここに:

NSString *path = [[NSBundle mainBundle] pathForResource:@"beep" 
                                             ofType:@"scpt"];    
NSAppleScript *script2 = [[NSAppleScript alloc]
                      initWithContentsOfURL:[NSURL fileURLWithPath:path] 
                      error:nil];  

パスはnilです。したがって、すべての確率で、ファイルはバンドルに含まれていません。プロジェクトのターゲットとして追加します。

どうやってするの

たとえば、昨日、バンドルにサメの画像を追加する必要があります。その方法は次のとおりです。

ここに画像の説明を入力してください

于 2013-01-02T22:39:14.220 に答える