2012-10-11 224 views
5

我寫了一個簡單的程序來幫助我調試。[NSData writeToFile]寫入哪裏?

#import "UIImage+saveScreenShotOnDisk.h" 

@implementation UIImage (saveScreenShotOnDisk) 

-(void)saveScreenshot{ 
    NSData * data = UIImagePNGRepresentation(self); 
    [data writeToFile:@"foo.png" atomically:YES]; 
} 

@end 

執行後,我想知道foo.png的位置。

我去

~Library/Application Support 

,我無法找到foo.png。它在哪裏?

如果我做

BOOL result = [data writeToFile:@"foo.png" atomically:YES]; 

結果將是NO,這是一種奇怪鑑於模擬器,與iPhone不同,可以在任何地方寫。

+1

這是在當前工作目錄(CWD),這通常是從你的程序啓動的地方開始。 – sidyll

+0

它不在那裏,如果我做BOOL結果= [數據writeToFile:@「foo.png」原子:是];結果是NO。 –

+0

在這裏看到:[http://stackoverflow.com/questions/5794422/iphone-save-uiimage-to-desktop-on-simulator] [1] [1]:HTTP://計算器。 com/questions/5794422/iphone-save-uiimage-to-desktop-on-simulator – smoothdvd

回答

19

您需要直接NSData對象到你想要的數據被保存在路徑:

NSString *docsDir; 
NSArray *dirPaths; 

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
docsDir = [dirPaths objectAtIndex:0]; 
NSString *databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"foo.png"]]; 
[data writeToFile:databasePath atomically:YES]; 

這將您的文件保存在您的應用程序文件夾中的設備(或模擬器)上。

+1

這是我最終做的。我想如果我們不指定路徑,它會進入一些「默認」路徑。我錯了。 –

+1

太好了,很高興幫助。 – Shachar

1

ü忘了提供其中u要write.Check這個將writeToFile位置或路徑:選擇:錯誤:

寫入的字節在接收到由給定路徑指定的文件。

- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr 

參數

路徑

The location to which to write the receiver's bytes. 

掩模

A mask that specifies options for writing the data. Constant components are described in 「NSDataWritingOptions」. 

errorPtr

If there is an error writing out the data, upon return contains an NSError object that describes the problem. 
1

你可以給一個搜索「NSDocumentsDirectory」,我通常搜索的路徑,使用這種方法的文件目錄,然後追加我的文件名給它。在方法writeToFile:中,提供了該附加路徑。然後使用iTunes>應用程序,滾動到底部,選擇您的應用程序,並且您應該能夠看到保存的文件。

PS:你應該在plist中設置一個valog,指定你的應用程序使用手機存儲。

5

存儲文件的默認位置是存儲可執行文件的文件夾。

看到你的可執行文件是通過正確的存儲點擊產品 - > YourExecutable:

Screenshot - show in finder executable

然後在取景器打開。

這裏pawel.plist資源通過

NSArray *a = @[@"mybike", @"klapki", @"clapki", @"ah"]; 
[a writeToFile:@"pawel.plist" atomically:NO]; 

pawel.plist resource I done from code

2

對於斯威夫特創建的基礎上,Shachar的回答是:

let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] + "/foo.png" 
data?.writeToFile(path, atomically: true)