2012-03-07 17 views
7

Mam aplikację w sklepie z aplikacjami, która używa danych podstawowych, aby zachować wiele danych. Wyjątkiem jest przechowywanie obrazów. Przechowuję obrazy w podkatalogach w katalogu Documents i przechowuję referencję NSURL do tego obrazu w odpowiednim atrybucie obiektu w głównej składnicy danych.Aktualizacje aplikacji, NSURL i katalog dokumentów

Zauważyliśmy, że gdy aktualizacja trafi do sklepu z aplikacjami, te obrazy nie zostaną znalezione, a zatem nie zostaną wyświetlone, korzystając z referencji zapisanych w poprzedniej wersji aplikacji. Mam podejrzenie, że problem polega na tym, że ponieważ używamy urządzeń programistycznych do testowania, problem ten rozprzestrzenia się, ponieważ katalog w katalogu Aplikacje, z którego korzysta aplikacja deweloperska, różni się od tego, który tworzy/wykorzystuje sklep aplikacji. Zauważyłem różnice między katalogiem App Store dla aplikacji w Aplikacjach i tym, który został utworzony podczas debugowania wersji w Xcode. W związku z tym adres URL przechowywany w danych podstawowych wskazuje na niewłaściwy folder aplikacji. To trochę trudne do debugowania, ponieważ nie mogę pobrać starszej wersji aplikacji, gdy nowa wersja zostanie wydana w sklepie.

Mam kilka pytań. Czy mogę zagwarantować, że w podkatalogu Applications użytkownicy, którzy pobiorą wersje tej samej aplikacji, będą tacy sami, co spowoduje, że nie będzie to dotyczyło urządzeń innych niż deweloperskie?

Czy powinienem przechowywać względne adresy URL obrazów lub ciągi znaków w celu przedstawienia położenia tych zasobów, czy też powinienem zachować zgodność z tym, co ostatecznie jest absolutnym adresem URL?

Dzięki tak dużo, Felipe

Odpowiedz

13

Należy używać względnych adresów URL do przechowywania odwołania do plików. Bezwzględna URL może się zmienić po aktualizacji aplikacji

pliki zapisane podczas aktualizacji App

Gdy użytkownik pobierze aktualizację aplikacji, iTunes instaluje aktualizację w nowym katalogu aplikacji. Następnie przenosi pliki danych użytkownika użytkownika ze starej instalacji do nowego katalogu aplikacji przed usunięciem starej instalacji. Pliki w następujących katalogów zagwarantowane mają być zachowane w trakcie procesu aktualizacji:

  • Application_Home/Dokumenty
  • Application_Home/Library

Chociaż plików w innych katalogach użytkowników mogą być również przenoszone przez, nie powinieneś polegać na na ich obecności po aktualizacji.

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

Thx do piaskownicy, dom Aplikacja jest również domem dla użytkownika. Tak więc możliwe jest użycie tyldy unixowej, która jest krótką ręką do domu użytkownika, tj. ~/Documents, ~/Library i tak dalej.

Użyj -[NSString stringByAbbreviatingWithTildeInPath], aby zmienić pełną ścieżkę w ścieżkę względną.I odwróć go za pomocą -[NSString stringByExpandingTildeInPath].

+0

Dziękuję bardzo! Właśnie tego potrzebowałem wiedzieć! – flizit

+2

Nie wiedziałem, że nowy katalog aplikacji został utworzony, gdy iTunes instalował aktualizacje: w efekcie otrzymałem dowiązania symboliczne, które bezwzględnie unieważniają ścieżki bezwzględne. Strzeżcie się więc tego zachowania deweloperów iOS! :) –

+0

Ten link jest zepsuty. Wypróbuj: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html –

0

myślę co szukasz jest następujące:

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
Powiązane problemy