2011-06-29 15 views
11

używam NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) aby uzyskać katalogu dokumentów aplikacyjnych w mojej aplikacji, ale tablica, która jest zwracana zawiera tylko jeden obiekt, a jest to niezapisywalny, błędny katalog:NSSearchPathForDirectoriesInDomains zwraca niewłaściwy katalog

/Users/Me/Biblioteka/Obsługa aplikacji/Symulator iPhone'a/Dokumenty

Znalazłem this question, co oznacza, że ​​problem związany jest z udostępnianiem, ale odpowiedź niewiele mówi. Sądzę więc, że zadaję podwójne pytanie, ale odpowiedź na to pytanie jest niewystarczająca, więc mam nadzieję, że dostanę w tej odpowiedzi konkretną odpowiedź.

+1

Odpowiedź na to pytanie jest naprawdę niezadowalająca. Kiedy znajdziesz rozwiązanie tutaj, zgłoś flagę mod do scalania/zamykania innych. –

+0

Czy na konsoli są wyświetlane jakiekolwiek błędy? –

+0

Niektóre inne odpowiedzi/komentarze wydają się wskazywać, że funkcja ta może faktycznie zwracać tablicę z * więcej niż jednym * katalogiem. Czy możesz sprawdzić i sprawdzić, czy tak jest? – jtbandes

Odpowiedz

7

Hmm ... więc jeden powód, dla którego zwrócono katalog, może być inny, niż oczekiwany dla aplikacji może być powiązany z typem docelowym Xcode. Czy nie byłoby to celem testowym? w takim przypadku poprawną odpowiedzią może być odpowiedź bez identyfikatora GUID aplikacji, ponieważ w rzeczywistości nie jest to aplikacja. Ten google group discussion oznacza, że ​​jeśli tak jest, dobrze byłoby po prostu utworzyć katalog.

Po prostu dla uśmiechu, utworzyłem katalog/Users/me/Library/Application Support/iPhone Simulator/Documents z okna terminala, a teraz wygląda na to, że działa. Nadal istnieją błędy testowe, ale mogą być prawdziwe.

Polecam że zmienisz aplikację testową w celu utworzenia katalogu dokumenty, jeżeli to brakuje - coś jak:

if(![[NSFileManager defaultManager] createDirectoryAtPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) withIntermediateDirectories:YES attributes:nil error:NULL]) 
     NSLog(@"Error: Create folder failed %@", NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)); 
2

Działa to dla mnie:

[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
             inDomains:NSUserDomainMask] lastObject]; 
+1

Dzięki za odpowiedź. Niestety URLsForDirectory: inDomains: jest dostępne tylko w iOS 4.0 i nowszych wersjach, a ja obsługuję 3.1.3. Czy istnieje inny sposób na znalezienie tego katalogu, który jest dostępny w wersji starszej niż 4.0? –

+1

Nie mam dla ciebie odpowiedzi, ale dlaczego nadal wspierasz 3.x? Nie ma sensu tracić produktywności dla <5% użytkowników. – vocaro

+0

Próbowałem tego podejścia, ale miałem ten sam problem. Daje mi dokładnie ten sam katalog, co NSSearchPathForDirectoriesInDomains. –

1

Można spróbować to:

/** 
Returns the path to the application's Documents directory. 
*/ 
- (NSString *)applicationDocumentsDirectory { 
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
} 

wierzę brakuje tylko komunikat lastObject.

+0

Dzięki. Tak naprawdę to robię - NSString, który jest zwracany z lastObject, jest nieprawidłową ścieżką określoną w pytaniu. –

+0

@Josh Brown Czy wiadomość zwraca więcej niż 1 element w tablicy ?, czy próbowałeś pisać do którejś z powracających ścieżek? –

+0

@ Jos Brown problem może być również z msg stringByAppendingPathComponent: jeśli nie przekazujesz mu prawidłową nazwę pliku. –

0

Mam dokładnie ten sam problem, aw moim przypadku to dlatego, że” m uruchamia kod z klasy XCTest.

Domyślam się, że testy nie są uruchamiane w obszarze izolowanym aplikacji.

To dlatego, że moje testy dotyczą projektu biblioteki statycznej, zawartej w głównym projekcie.

Po uruchomieniu dokładnie tego samego kodu z przebiegu mojej aplikacji ścieżki są zwracane poprawnie.

Mam nadzieję, że to pomoże.

Powiązane problemy