Domanda

Voglio copiare i percorsi dei file negli Appunti in modo che possano essere copiati in editor di testo come stringhe ma li voglio anche a disposizione per il cercatore per copiare i file.

Ho scritto il codice mostrato di seguito conformi alle linee guida di Snow Leopard (ad esempio Utilizzare Wriwobjects quando copia gli URL del file)

NSString* path1 = @"/Users/dave/trash/mas.sh";
NSString* path2 = @"/Users/dave/trash/books.xml";
NSURL* url1 = [NSURL fileURLWithPath:path1 isDirectory:NO];
NSURL* url2 = [NSURL fileURLWithPath:path2 isDirectory:NO];
NSArray* paths = [NSArray arrayWithObjects:path1, path2, nil];

NSString* pathPerLine = [paths componentsJoinedByString:@"\n"];
// Put strings on top otherwise paster app receives the url (only the first)
// Urls will be used by Finder for files operations (copy, move)
NSArray* urls = [NSArray arrayWithObjects:pathPerLine, url1, url2, nil];
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
[pasteboard writeObjects:urls];
.

Ma su alcuni editor (come XCode) anche gli URL sono incollati come mostrato di seguito (Finder utilizza correttamente gli URL per copiare / spostare)

/Users/dave/trash/mas.sh
/Users/dave/trash/books.xml
file://localhost/Users/dave/trash/mas.sh
file://localhost/Users/dave/trash/books.xml
.

Come posso incollare solo i percorsi dei file senza gli URL dei file utilizzando 10.6 Codice conforme?

the nsfilenamespboardtype Utilizzo sembra scoraggiato

.

nsfilenamespboardtype Una serie di oggetti NSString che progetta uno o più nomi di file. Su Mac OS X V10.6 e versioni successive, utilizzare WriversObjects: per scrivere gli URL di file su Pasteboard. Disponibile in Mac OS X V10.0 e in seguito. Dichiarato in nspasteboard.h.

È stato utile?

Soluzione

La documentazione può suonare come è necessario utilizzare solo writeObjects:, ma usi solo questo per gli URL del file.

Nella parte inferiore di nspasteboard.h è questa sezione:

APPKIT_EXTERN NSString *NSStringPboardType;     // Use NSPasteboardTypeString
APPKIT_EXTERN NSString *NSFilenamesPboardType;      // Use -writeObjects: to write file URLs to the pasteboard
.

Questi sono i vecchi tipi che non dovresti usare, ma mostra che usi solo writeObjects: durante il tentativo di inserire URL (o URL) del file.E utilizzare i tipi per altri dati.

Quindi per ottenere il comportamento corretto:

NSString* path1 = @"/Users/dave/trash/mas.sh";
NSString* path2 = @"/Users/dave/trash/books.xml";
NSURL* url1 = [NSURL fileURLWithPath:path1 isDirectory:NO];
NSURL* url2 = [NSURL fileURLWithPath:path2 isDirectory:NO];
NSArray* paths = [NSArray arrayWithObjects:path1, path2, nil];

NSString* pathPerLine = [paths componentsJoinedByString:@"\n"];

//Note, only the URLs not the pathsPerLine
NSArray* urls = [NSArray arrayWithObjects:url1, url2, nil];
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
[pasteboard writeObjects:urls];
//Now add the pathsPerLine as a string
[pasteboard setString:pathPerLine forType:NSStringPboardType];
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top