2013-04-11 91 views
1

我是Objective-C的新手。將應用程序的內容複製到桌面編程式

如何將我的整個.app包([[NSBundle mainBundle] bundleURL])以編程方式複製到我的桌面?

這是我的代碼,但沒有幫助我。

NSString *sourcepath = [[NSBundle mainBundle] bundlePath]; 
NSString *destpath = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop"]; 
[[NSFileManager defaultManager] copyItemAtPath:sourcepath toPath:destpath error:nil]; 
+0

確實有意義在用戶的硬盤上創建應用程序的克隆?你究竟在努力實現什麼?某些* Windows *類似於桌面上的別名? – Jay 2013-04-11 09:04:02

+0

其實我只是想知道如何在目標c中以編程方式複製。我試圖使用[[NSFileManager的defaultManager],但它不幫助我可能是我可能是錯的地方。 – fazal 2013-04-11 09:12:24

+0

您是否添加了錯誤處理和'NSLog()' - 是否返回了一個'NSError'? – Jay 2013-04-11 12:09:44

回答

1

您可以使用標準的NSFileManager方法

複製目錄以及文件。從Apple的文檔:

複製項目時,當前進程必須有權讀取srcPath中的文件或目錄並寫入dstPath的父目錄。如果srcPath中的項目是一個目錄,則此方法將複製該目錄及其所有內容,包括任何隱藏文件。

如果已經存在或者複製將失敗(再次按照Apple文檔),則必須手動刪除目標中具有相同名稱的項目(文件/目錄)。

+0

好吧,我用代碼編輯我的問題。 – fazal 2013-04-11 10:01:36

+0

你能否請你重新訪問我的問題,我已經通過插入我的代碼進行了編輯。 – fazal 2013-04-11 11:01:54

0

以下是我解決這個問題的方法,可能會對某人有所幫助。

- (IBAction)createShortcut:(id)sender { 

NSString *sourcepath = [[NSBundle mainBundle] bundlePath]; 
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES); 
NSString *theDesktopPath = [paths objectAtIndex:0]; 
NSString *saveFilePath = [theDesktopPath stringByAppendingPathComponent:@"myApp.app"]; 
[[NSFileManager defaultManager] copyItemAtPath:sourcepath toPath:saveFilePath error:nil]; 

} 
+0

總是檢查和處理文件操作的潛在錯誤是非常有價值的,也就是說,我會檢查copyItemAtPath:call是否返回「YES」,並提供對錯誤細節的方法調用的「NSError」引用。 – Jay 2013-04-16 17:07:41