2012-10-11 14 views
5

Napisałem prosty program, który pomoże mi w debugowaniu.Skąd pisze [NSData writeToFile]?

#import "UIImage+saveScreenShotOnDisk.h" 

@implementation UIImage (saveScreenShotOnDisk) 

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

@end 

Po to zrealizowane, chcę wiedzieć, gdzie znajduje się foo.png.

Poszedłem do

~Library/Application Support 

i nie mogę znaleźć foo.png. Gdzie to jest?

Jeśli robię

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

wynik będzie NO, co jest trochę dziwne, zważywszy, że symulator, w przeciwieństwie do iPhone, można pisać w dowolnym miejscu.

+1

Jest w bieżącym katalogu roboczym (CWD), który zazwyczaj jest miejsce, z którego został uruchomiony twój program. – sidyll

+0

Nie ma go i jeśli wykonuję BOOL result = [data writeToFile: @ "foo.png" atomowo: TAK]; wynikiem jest NIE. –

+0

zobaczyć tutaj: [http://stackoverflow.com/questions/5794422/iphone-save-uiimage-to-desktop-on-simulator] [1] [1]: http: // stackoverflow. com/questions/5794422/iphone-save-uiimage-to-desktop-on-simulator – smoothdvd

Odpowiedz

19

Trzeba kierować obiekt NSData do ścieżki, która ma dane mają być zapisane w:

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]; 

Spowoduje to zapisanie pliku w katalogu aplikacji na urządzeniu (lub symulator).

+1

Tak właśnie zrobiłem. Pomyślałem, że jeśli nie określimy ścieżki, przejdzie ona do jakiejś "domyślnej" ścieżki. Myliłem się. –

+1

Świetnie, cieszę się, że pomaga. – Shachar

1

U zapomniał dostarczyć lokalizację lub ścieżkę, gdzie u chcą write.Check ten WriteToFile: opcje: Błąd:

Zapisuje bajtów w odbiorniku do pliku określonego przez daną ścieżkę.

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

Parametry

ścieżka

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

maski

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

Można dać wyszukiwania dla „NSDocumentsDirectory”, zwykle szukać ścieżkę do katalogu dokumentów przy użyciu tej metody, a następnie dołączyć moją nazwę pliku do niego. w metodzie writeToFile: podano tę dołączoną ścieżkę. Następnie za pomocą iTunes> aplikacji przewiń do dołu, wybierz swoją aplikację i powinieneś zobaczyć zapisany plik.

PS: powinieneś ustawić wartość valur w pliku plist, która określa, że ​​aplikacja używa pamięci telefonu.

5

Domyślnym miejscem przechowywania plików jest folder, w którym przechowywane są pliki wykonywalne.

Zobacz, gdzie przechowywany jest plik wykonywalny poprzez kliknięcie prawym przyciskiem Produkty-> YourExecutable:

Screenshot - show in finder executable

Następnie otwórz w Finderze.

Tutaj pawel.plist zasób tworzyć poprzez

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

pawel.plist resource I done from code

2

Dla Swift, na podstawie Shachar za odpowiedź:

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