2015-02-22 27 views
8

Tôi đang lưu trữ tệp .mp3 trong thư mục tài liệu ứng dụng iOS và lưu đường dẫn tới Dữ liệu cốt lõi. Khi tôi xây dựng lại ứng dụng Xcode dường như di chuyển dữ liệu ứng dụng sang một thư mục khác, do đó làm cho đường dẫn được lưu trữ không hợp lệ. Tại sao điều này xảy ra và các phương pháp hay nhất về cách lưu đường dẫn tệp là gì?Xcode thay đổi vị trí của thư mục ứng dụng trên bản dựng

Tôi đang sử dụng Xcode 6.2 và đã truy xuất thành công tệp trong quá khứ.

vị trí của tập tin sau khi tải về:

in ~/Library/Developer/CoreSimulator/Devices/82D1931C-590D-45A2-AB9B-8D1D4F2530C5/data/Containers/Data/Application/ 
$ find . -iname p612.mp3 
./1C070BF8-0E2E-4EAC-99B6-C56E48675E6E/Documents/adf07cf85254e8f28f942f2d6fa704ae/p612.mp3 

Vị trí của tập tin sau khi xây dựng lại:

in ~/Library/Developer/CoreSimulator/Devices/82D1931C-590D-45A2-AB9B-8D1D4F2530C5/data/Containers/Data/Application/ 
$ find . -iname p612.mp3 
./E6C7D0AF-E61C-4BDD-AF4B-68C445E2BB0D/Documents/adf07cf85254e8f28f942f2d6fa704ae/p612.mp3 
+0

Tôi nghĩ tính năng này mới đối với iOS8. Xem [SO Question] (http://stackoverflow.com/q/26552245/3985749). Giải pháp là chỉ lưu trữ tên tệp và tra cứu URL thư mục Documents khi đọc và lưu. – pbasdf

Trả lời

11

Kể từ iOS 8.0, mỗi khi bạn xây dựng lại mã của bạn, tên của thư mục ứng dụng (trong đó có các tài liệu và thư mục thư viện của bạn) thay đổi. Đây là hành vi dự định.

Vì vậy, nếu bạn muốn lưu trữ đường dẫn, bạn chỉ nên lưu trữ tên tệp và sau đó kết hợp nó với vị trí của thư mục tài liệu khi đang di chuyển. Bằng cách này, nó sẽ luôn trỏ đến vị trí chính xác.

Nội dung của thư mục tài liệu sẽ vẫn tồn tại mặc dù tên của thư mục mà nó cư trú sẽ thay đổi từ khi xây dựng thành bản dựng.

// Returns the URL to the application's Documents directory. 
- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

Xem: Technical Note TN2406.

1

Cập nhật nhanh để trả lại DocumentsDirectory cho sự kiên trì giữa các bản dựng. Câu trả lời này sẽ trả về đường dẫn đến Dir. Sau đó, bạn có thể nối thêm tên tệp/thành phần cuối cùng để hoàn thành.

func findAppDir()->String{ 
    let appDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String 
    let path = "file://\(appDir)/" 
    return path 
} 
Các vấn đề liên quan