[英]NSTask in Objective-C
因此,我试图从程序中运行一些终端命令,但出现一些令人困惑的错误。
我是来自Java的较新开发人员,所以我可能会缺少一些东西。
这是代码:
NSTask *task = [[NSTask alloc] init];
NSString *commitText = [commitMessage stringValue];
NSString *a = [NSString stringWithFormat:@"cd %@", dirPath];
NSString *c = [NSString stringWithFormat:@"git commit -m '%@'", commitText];
NSArray *commands = [[NSArray alloc]initWithObjects:a,
@"git add 'Project'",
c,
@"git push origin HEAD",
nil];
[task setLaunchPath:@"/bin/sh"];
// Do commands
NSArray *args = [NSArray arrayWithObjects:commands,
nil];
[task setArguments: args];
[task launch];
这是错误:
2012-06-09 08:35:20.561 Auto Git[5433:403] -[__NSArrayI fileSystemRepresentation]: unrecognized selector sent to instance 0x7fb250d6a1e0
2012-06-09 08:35:20.561 Auto Git[5433:403] -[__NSArrayI fileSystemRepresentation]: unrecognized selector sent to instance 0x7fb250d6a1e0
2012-06-09 08:35:20.679 Auto Git[5433:403] (
0 CoreFoundation 0x00007fff870b4f56 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff90e35d5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff871411be -[NSObject doesNotRecognizeSelector:] + 190
3 CoreFoundation 0x00007fff870a1e23 ___forwarding___ + 371
4 CoreFoundation 0x00007fff870a1c38 _CF_forwarding_prep_0 + 232
5 Foundation 0x00007fff9174f3a3 -[NSConcreteTask launchWithDictionary:] + 901
6 Auto Git 0x000000010d83c6db -[Push push:] + 571
7 CoreFoundation 0x00007fff870a470d -[NSObject performSelector:withObject:] + 61
8 AppKit 0x00007fff8e0f8f7e -[NSApplication sendAction:to:from:] + 139
9 AppKit 0x00007fff8e0f8eb2 -[NSControl sendAction:to:] + 88
10 AppKit 0x00007fff8e0f8ddd -[NSCell _sendActionFrom:] + 137
11 AppKit 0x00007fff8e0f82a0 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2014
12 AppKit 0x00007fff8e177fc4 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 489
13 AppKit 0x00007fff8e0f6eaa -[NSControl mouseDown:] + 786
14 AppKit 0x00007fff8e0c2348 -[NSWindow sendEvent:] + 6306
15 AppKit 0x00007fff8e05ba55 -[NSApplication sendEvent:] + 5593
16 AppKit 0x00007fff8dff20c6 -[NSApplication run] + 555
17 AppKit 0x00007fff8e26e244 NSApplicationMain + 867
18 Auto Git 0x000000010d83bff2 main + 34
19 Auto Git 0x000000010d83bfc4 start + 52
20 ??? 0x0000000000000003 0x0 + 3
)
谢谢!
您的arguments数组包含一个数组。 它应该是一个字符串数组。 将您的commands
对象用作NSTask的参数。
我认为问题在于您将带有字符串数组的数组传递给setArguments
。 您应该传递仅包含字符串而不是嵌套数组的数组。
但是我认为您会误解NSTask
的参数是NSTask
工作的。 您可能应该执行以下操作:
[task setArguments:[[[NSArray alloc] initWithObjects:
@"git", @"add", @"Project", nil]
autorelease]];
等等,或者如果您真的想使用sh
,则可能需要添加一些;
分隔外壳命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.