Objective c 文本文件是';没有被创造 int main(int argc,const char*argv[]{ NSAppleScript*脚本=[[NSAppleScript alloc]initWithSource:@“告诉应用程序\“Safari\”返回窗口1的选项卡的URL”]; NSDictionary*scriptError=nil; NSAppleEventDescriptor*描述符=[script executeAndReturnError:&scriptError]; 如果(脚本错误){ NSLog(@“错误:%@”,脚本错误); }否则{ NSAppleEventDescriptor*listDescriptor=[描述符强制描述符类型:typeAEList]; NSMUTABLEARRY*结果=[[NSMUTABLEARRY alloc]init]; 对于(NSInteger i=1;i
Tilde扩展由Unix shell处理。Objective-C不会自动将该字符串扩展为桌面目录的绝对路径 您需要使用Objective c 文本文件是';没有被创造 int main(int argc,const char*argv[]{ NSAppleScript*脚本=[[NSAppleScript alloc]initWithSource:@“告诉应用程序\“Safari\”返回窗口1的选项卡的URL”]; NSDictionary*scriptError=nil; NSAppleEventDescriptor*描述符=[script executeAndReturnError:&scriptError]; 如果(脚本错误){ NSLog(@“错误:%@”,脚本错误); }否则{ NSAppleEventDescriptor*listDescriptor=[描述符强制描述符类型:typeAEList]; NSMUTABLEARRY*结果=[[NSMUTABLEARRY alloc]init]; 对于(NSInteger i=1;i,objective-c,cocoa,scripting,applescript,Objective C,Cocoa,Scripting,Applescript,Tilde扩展由Unix shell处理。Objective-C不会自动将该字符串扩展为桌面目录的绝对路径 您需要使用stringByExpandingTildeInPath或 int main(int argc, const char * argv[]) { NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to return URL of tabs o
stringByExpandingTildeInPath
或
int main(int argc, const char * argv[]) {
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to return URL of tabs of window 1"];
NSDictionary *scriptError = nil;
NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&scriptError];
if(scriptError) {
NSLog(@"Error: %@",scriptError);
} else {
NSAppleEventDescriptor *listDescriptor = [descriptor coerceToDescriptorType:typeAEList];
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSInteger i = 1; i <= [listDescriptor numberOfItems]; ++i) {
NSAppleEventDescriptor *URLDescriptor = [listDescriptor descriptorAtIndex:i];
[result addObject: URLDescriptor.stringValue];
}
NSString *content = [result componentsJoinedByString:@","];
NSData *fileContents = [content dataUsingEncoding:NSUTF8StringEncoding];
[[NSFileManager defaultManager] createFileAtPath:@"~/Desktop/foo.txt"
contents:fileContents
attributes:nil];
NSLog(@"Result: %@", [result copy]);
}
return 0;
}
要为
createFileAtPath
构建正确的路径来回答第二个问题,告诉应用程序“Safari”获取每个窗口每个选项卡的URL
应该返回URL字符串列表(注意应用程序Apple事件支持中的任何错误/限制)
您可能还想考虑使用桥接器,它会为您做所有的数据转换和调用工作。虽然还不理想,但它不像NSAPPEScript/NSpApple Envidior描述符或令人沮丧的中断脚本脚本那样令人厌烦,因此通常是最容易和最可靠的方式来与“Apple Spice”对话。来自ObjC的应用程序。
要回答您的第一个问题,您可以使用:NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
而不是:
[content writeToFile:[NSHomeDirectory() stringByAppendingString: @"/Desktop/foo.txt"]
atomically:YES
encoding:NSUTF8StringEncoding
error:nil]
content
是您在代码中使用的变量
NSData *fileContents = [content dataUsingEncoding:NSUTF8StringEncoding];
[[NSFileManager defaultManager] createFileAtPath:@"~/Desktop/foo.txt"
contents:fileContents
attributes:nil];