NSWorkspace 使用示例
CC 許可,轉(zhuǎn)載請(qǐng)注明出處
NSWorkspace 為應(yīng)用程序提供如下服務(wù):
1)打開,操作文件/設(shè)備,獲取文件/設(shè)備信息
2)跟蹤文件,設(shè)備以及數(shù)據(jù)庫的變動(dòng)
3)設(shè)置或獲取文件的 Finder 信息
4)啟動(dòng)應(yīng)用程序。
NSWorkspace 是個(gè) Singleton 類,我們通過 sharedWorkspace 來訪問它。比如下面的語句用 TextEdit 打開指定的文件:
[[NSWorkspace sharedWorkspace] openFile:@"/Myfiles/README" withApplication:@"TextEdit"];
下面的代碼演示了大部分 workspace 的應(yīng)用,運(yùn)行效果圖如下:


- (IBAction) launchApplication:(id) sender
{
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
//BOOL wasLaunched = [workspace launchApplication:@"Safari"];
// launch without activation
//
BOOL wasLaunched = [workspace launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
if ( wasLaunched )
NSLog (@"Safari was launched");
else
NSLog (@"Safari was not launched");
NSArray * apps = [workspace valueForKeyPath:@"launchedApplications.NSApplicationName"];
self.launchedApplications = [NSString stringWithFormat:@"Launched Applications:\n%@", apps];
NSLog(@"Launched Applications:\n%@", apps);
}
- (IBAction) openPdfByDefault:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openURL: fileURL];
}
- (IBAction) openPdfBySafari:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openFile:[fileURL path] withApplication:@"Safari"];
}
- (IBAction) selectFileInFinder:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace selectFile:[fileURL path] inFileViewerRootedAtPath:nil];
}
- (IBAction) gatherFileInfo:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
NSString * appName;
NSString * fileType;
[workspace getInfoForFile: [fileURL path]
application: &appName
type: &fileType];
BOOL removable = NO;
BOOL writeable = NO;
BOOL unmountable = NO;
NSString *description;
NSString *fileSystemType;
[workspace getFileSystemInfoForPath:[fileURL path]
isRemovable: &removable
isWritable: &writeable
isUnmountable: &unmountable
description: &description
type: &fileSystemType];
self.fileInfo = [NSString stringWithFormat:
@"AppName: %@\ntype: %@"
@"\nremoveable: %d\nwriteable: %d\nunmountable: %d"
@"\ndescription: %@\nfileSystemType: %@",
appName, fileType,
removable, writeable, unmountable,
description, fileSystemType];
NSLog (@" >> gather file info:\n%@", self.fileInfo);
}
- (IBAction) copyFileToDesktop:(id) sender
{
NSString * name = @"About Xcode and iOS SDK.pdf";
NSArray * files = [NSArray arrayWithObject: name];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace performFileOperation: NSWorkspaceCopyOperation
source: @"/Developer/"
destination: @"/Users/tianyouhui/Desktop/"
files: files
tag: 0];
}
- (IBAction) moveFileToTrash:(id) sender
{
NSString * name = @"About Xcode and iOS SDK.pdf";
NSArray * files = [NSArray arrayWithObject: name];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace performFileOperation: NSWorkspaceRecycleOperation
source: @"/Users/tianyouhui/Desktop/"
destination: @""
files: files
tag: 0];
}
- (IBAction) gatherIconOfFile:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
self.icon = [workspace iconForFile: [fileURL path]];
//NSString * path = [workspace fullPathForApplication:@"Safari"];
//self.xcodeIcon = [workspace iconForFile: path];
self.xcodeIcon = [workspace iconForFileType:@"xcodeproj"];
}
- (IBAction) openUrlBySafari:(id) sender
{
NSURL * url = [NSURL URLWithString:@"http://m.shnenglu.com/kesalin/"];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openURL: url];
}
{
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
//BOOL wasLaunched = [workspace launchApplication:@"Safari"];
// launch without activation
//
BOOL wasLaunched = [workspace launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
if ( wasLaunched )
NSLog (@"Safari was launched");
else
NSLog (@"Safari was not launched");
NSArray * apps = [workspace valueForKeyPath:@"launchedApplications.NSApplicationName"];
self.launchedApplications = [NSString stringWithFormat:@"Launched Applications:\n%@", apps];
NSLog(@"Launched Applications:\n%@", apps);
}
- (IBAction) openPdfByDefault:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openURL: fileURL];
}
- (IBAction) openPdfBySafari:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openFile:[fileURL path] withApplication:@"Safari"];
}
- (IBAction) selectFileInFinder:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace selectFile:[fileURL path] inFileViewerRootedAtPath:nil];
}
- (IBAction) gatherFileInfo:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
NSString * appName;
NSString * fileType;
[workspace getInfoForFile: [fileURL path]
application: &appName
type: &fileType];
BOOL removable = NO;
BOOL writeable = NO;
BOOL unmountable = NO;
NSString *description;
NSString *fileSystemType;
[workspace getFileSystemInfoForPath:[fileURL path]
isRemovable: &removable
isWritable: &writeable
isUnmountable: &unmountable
description: &description
type: &fileSystemType];
self.fileInfo = [NSString stringWithFormat:
@"AppName: %@\ntype: %@"
@"\nremoveable: %d\nwriteable: %d\nunmountable: %d"
@"\ndescription: %@\nfileSystemType: %@",
appName, fileType,
removable, writeable, unmountable,
description, fileSystemType];
NSLog (@" >> gather file info:\n%@", self.fileInfo);
}
- (IBAction) copyFileToDesktop:(id) sender
{
NSString * name = @"About Xcode and iOS SDK.pdf";
NSArray * files = [NSArray arrayWithObject: name];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace performFileOperation: NSWorkspaceCopyOperation
source: @"/Developer/"
destination: @"/Users/tianyouhui/Desktop/"
files: files
tag: 0];
}
- (IBAction) moveFileToTrash:(id) sender
{
NSString * name = @"About Xcode and iOS SDK.pdf";
NSArray * files = [NSArray arrayWithObject: name];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace performFileOperation: NSWorkspaceRecycleOperation
source: @"/Users/tianyouhui/Desktop/"
destination: @""
files: files
tag: 0];
}
- (IBAction) gatherIconOfFile:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
self.icon = [workspace iconForFile: [fileURL path]];
//NSString * path = [workspace fullPathForApplication:@"Safari"];
//self.xcodeIcon = [workspace iconForFile: path];
self.xcodeIcon = [workspace iconForFileType:@"xcodeproj"];
}
- (IBAction) openUrlBySafari:(id) sender
{
NSURL * url = [NSURL URLWithString:@"http://m.shnenglu.com/kesalin/"];
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openURL: url];
}