2009-05-26 30 views
6

Mam aplikację na iPhone'a, w której wiele obiektów domeny jest wypełnionych danymi wprowadzonymi przez użytkownika. Aby przywrócić stan po przerwaniu, obiekty te implementują protokół NSCoding i są zapisywane na dysku (katalogu Documents) w komunikacie applicationWillTerminate. Następnie, gdy aplikacja zostanie uruchomiona ponownie, bajty danych zostaną załadowane, a obiekty domeny zostaną ponownie wypełnione. Kod dostać katalog dokumentów jest następująca:Jak naprawić błąd Cocoa 513?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

To działało świetnie w symulatorze, ale kiedyś wdrożył aplikację na iPhone przestał działać. Powodem jest kod błędu iPhone 513 - co najwyraźniej oznacza "odmowa zgody". Jest uwaga w Dokumentach iPhone Dev które wyjaśniają nieco więcej -

Na urządzeniu zwrócony ścieżka (documentsDirectory) jest podobna do następujący: /var/mobile/Applications/30B51836- D2DD-43AA-BCB4-9D4DADFED6A2/Dokumenty

jednak na Simulator zwrócony ścieżka przyjmuje następującą postać:

/Volumes/Stuff/Users/johndoe/Library/Application Support/iPhone Simulator/user/Applications/118086A0-FAAF-4CD4-9A0F-CD5E8D287270/Dokumenty

To jest dokładnie zachowanie, które widzę. Nie jestem do końca pewien, jak to się ma do otrzymania błędu odmowy uprawnień i co mogę zrobić, aby to naprawić. To nie znaczy poniżej -

do odczytu i zapisu preferencji użytkownika, użyć klasy NSUserDefaults lub CFPreferences API. Interfejsy te eliminują potrzebę utworzenia bezpośrednio ścieżki do katalogu Library/Preferences/oraz do odczytu i zapisu plików preferencji . Aby uzyskać więcej informacji na temat za pomocą tych interfejsów, patrz „Dodawanie wiązki Ustawienia”.

Jeśli aplikacja zawiera dźwięk, wizerunek lub inne zasoby w wiązce aplikacji, należy użyć klasy NSBundle lub CFBundle nieprzezroczysty wpisz , aby załadować te zasoby. Pakiety mają nieodłączną wiedzę na temat tego, gdzie w aplikacji znajdują się zasoby . Ponadto pakiety mają informacje o preferencjach językowych użytkownika i mogą zlokalizować zasoby domyślne automatycznie. Więcej informacji o pakietach, zobacz „Zastosowanie pakietu.”

nie widzę w jaki sposób mogę korzystać z aplikacji, aby załadować Bundle bajtów danych chociaż. Każda pomoc lub przykłady?

Odpowiedz

13

Nie wiem, jak to działa, ale najwyraźniej użycie stringByAppendingPathComponent zamiast stringByAppendingString do utworzenia ścieżki naprawiło problem.

+1

Myślę, że różnica polega na ukośniku na końcu "Dokumentów". –

1

pokrewnego do pakietu aplikacji ustęp odnosi się do:

NSString *path = [[NSBundle mainBundle] pathForResource:@"somefile" ofType:@"png"]; 

Te i inne metody z NSBundle pozwalają odnieść zasobów od wewnątrz pakietu aplikacji bez faktycznie wiedząc, gdzie wiązka aplikacja znajduje.

Nota prawna: Nie współpracowałem z iPhonem.

Biorąc pod uwagę zastrzeżenie, w prostym systemie OS X jest uważany za zły sposób pisania rzeczy wewnątrz pakietu aplikacji. Zapisujesz dane w katalogu użytkownika aplikacji -> zobacz NSApplicationSupportDirectory.

0

Mam ten błąd (513), ponieważ ścieżka była nieprawidłowa. Podwójne sprawdzenie mojej ścieżki naprawiło problem :)

Powiązane problemy