2012-03-07 19 views
7

Tôi có một ứng dụng trong cửa hàng ứng dụng sử dụng Dữ liệu cốt lõi để duy trì nhiều dữ liệu. Trường hợp ngoại lệ là lưu trữ hình ảnh. Tôi lưu trữ hình ảnh trong các thư mục con vào thư mục Documents và lưu trữ một tham chiếu NSURL tới hình ảnh đó trong thuộc tính đối tượng thích hợp trong kho dữ liệu lõi.Cập nhật ứng dụng, NSURL và Thư mục tài liệu

Chúng tôi nhận thấy rằng, khi bản cập nhật biến nó thành cửa hàng ứng dụng, những hình ảnh đó không được tìm thấy và do đó không hiển thị, sử dụng các tham chiếu được lưu trữ với phiên bản trước của ứng dụng. Bây giờ, tôi nghi ngờ rằng vấn đề là, vì chúng tôi đang sử dụng các thiết bị phát triển để thử nghiệm, vấn đề này lan truyền vì Thư mục trong thư mục Ứng dụng mà ứng dụng dev sử dụng khác với ứng dụng mà cửa hàng ứng dụng đang tạo/sử dụng. Tôi đã nhận thấy sự khác biệt giữa thư mục App store cho ứng dụng trong Applications và ứng dụng được tạo trong khi gỡ lỗi các phiên bản trong Xcode. Như vậy, URL được lưu trữ trong các điểm dữ liệu chính vào thư mục ứng dụng sai. Điều này thật khó để gỡ lỗi vì tôi không thể tải xuống phiên bản ứng dụng cũ hơn khi phiên bản mới đã được phát hành trong cửa hàng.

Vì vậy, tôi có một vài câu hỏi. Tôi có thể đảm bảo rằng thư mục con Ứng dụng trong đó những người tải xuống phiên bản của cùng một ứng dụng sẽ giống nhau không, điều này có gây ra sự cố cho thiết bị không phát triển không?

Tôi có nên lưu trữ url hoặc chuỗi hình ảnh tương đối để đại diện cho vị trí của các tài nguyên này hay không hoặc tôi có nên lưu trữ những gì kết thúc bằng url tuyệt đối không?

Cảm ơn rất nhiều, Felipe

Trả lời

13

Bạn nên sử dụng URL tương đối để lưu trữ tài liệu tham khảo để tập tin. URL tuyệt đối có thể thay đổi sau khi cập nhật ứng dụng

tập tin đã lưu Trong App cập nhật

Khi người dùng tải một bản cập nhật ứng dụng, iTunes cài đặt các bản cập nhật trong một thư mục ứng dụng mới. Sau đó nó di chuyển các tệp dữ liệu của người dùng từ cài đặt cũ sang thư mục ứng dụng mới trước khi xóa cài đặt cũ. File trong thư mục sau đây được đảm bảo để được bảo quản trong quá trình cập nhật:

  • Application_Home/Documents
  • Application_Home/Library

Mặc dù file trong danh bạ người dùng khác cũng có thể được chuyển qua, bạn không nên dựa vào khi chúng xuất hiện sau khi cập nhật.

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

Thx vào sandbox, các nhà ứng dụng cũng là nơi cư trú người dùng. Vì vậy, có thể sử dụng dấu ngã unix, đó là một bàn tay ngắn đến nhà người dùng, tức là ~/Documents, ~/Library và cứ tiếp tục như vậy.

Sử dụng -[NSString stringByAbbreviatingWithTildeInPath] để biến đường dẫn đầy đủ thành đường dẫn tương đối ~.Và đảo ngược nó với -[NSString stringByExpandingTildeInPath].

+0

Cảm ơn bạn rất nhiều! Đó chỉ là những gì tôi cần biết! – flizit

+2

Tôi không biết rằng thư mục ứng dụng mới đã được tạo khi iTunes cài đặt bản cập nhật: tôi đã kết thúc có liên kết tượng trưng bằng cách sử dụng đường dẫn tuyệt đối bị vô hiệu. Vì vậy hãy cẩn thận với hành vi này của các nhà phát triển iOS! :) –

+0

Liên kết đó bị hỏng. Thử: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html –

0

Tôi nghĩ rằng những gì bạn đang tìm kiếm như sau:

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];