2009-09-23 9 views
14

Mam aplikację Cocoa, która przechowuje odniesienie do plików multimedialnych (obrazy, filmy itp.) Na komputerze użytkownika. Zastanawiam się, czy istnieje sposób, aby uzyskać odniesienie do tego pliku, inny, który za pomocą ścieżki pliku, tak, jeśli użytkownik przenosi ten plik do innego folderu na swoim komputerze, nadal wiem, gdzie to jest. Jestem obecnie przechowywania tablicę ścieżki dostępu do plików, które są przekazywane z powrotem ze standardowego kakao dialog otwarty:Zachowaj odwołanie do pliku po jego przeniesieniu w cel-c?

-(void)addMultimediaDidEnd:(NSOpenPanel*)sheet 
      returnCode:(int)returnCode 
      contextInfo:(NSString *)contextInfo 
{ 
    if(returnCode == NSOKButton) { 
     [sheet orderOut:nil]; 
     [self saveFiles:[sheet filenames]]; 
    } 
} 

Odpowiedz

18

W OS X 10.6 (Snow Leopard), NSURL można przekształcić do adresu URL pliku odniesienia (stosując -[NSURL fileReferenceURL]), który odwołuje się do pliku pomiędzy ruchami, podczas gdy aplikacja jest uruchomiona. Jeśli chcesz zachować ten odnośnik pliku, użyj +[NSURL writeBookmarkData:toURL:options:error:] przekazując dane zakładki wygenerowane przez -[NSURL bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error]. Zakładkę można później rozwiązać przy pomocy +[NSURL URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:], przekazując dane zakładki zwrócone z +[NSURL bookmarkDataWithContentsOfURL:error:].

W wersjach wcześniejszych niż OS X 10.6, ta sama funkcjonalność (bez pewnych cech sieciowych) jest dostępna za pośrednictwem AliasManager, interfejsu z epoki węgla do systemu aliasów plików OS X. Na menadżerze aliasów znajduje się kilka programów owijających Objective-C, dzięki którym korzystanie z niego jest o wiele przyjemniejsze. Mój ulubiony to dodatki do Wolfa Rentzsch Chris Hansona BDAlias (dostępny na github).

9

Oto krótki przykład użycia zakładek do śledzenia plików w ruchach:

- (NSData *)bookmarkFromURL:(NSURL *)url { 
    NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationMinimalBookmark 
        includingResourceValuesForKeys:NULL 
             relativeToURL:NULL 
               error:NULL]; 
    return bookmark; 
} 

- (NSURL *)urlFromBookmark:(NSData *)bookmark { 
    NSURL *url = [NSURL URLByResolvingBookmarkData:bookmark 
              options:NSURLBookmarkResolutionWithoutUI 
            relativeToURL:NULL 
           bookmarkDataIsStale:NO 
              error:NULL]; 
    return url; 
} 

Od https://github.com/ptrsghr/FileWatcher/blob/master/FileWatcherExample/Classes/FileWatcher.m

+0

Dzięki za przykład! – Austin

+0

działa to w piaskownicy? Czy muszę prosić o specjalne uprawnienia? –

+0

Wiem, że pisałeś na GitHub, ale zostawię to tutaj dla kompletności. Uważam, że powinien działać w trybie piaskownicy (https://github.com/ptrsghr/FileWatcher/pull/1#commits-pushed-02a521c). Daj mi znać, jeśli napotkasz jakiekolwiek problemy. – rgbrgb

Powiązane problemy