2009-09-23 12 views
5

Tôi có một số tài nguyên (đã nén) cần được gửi cùng với ứng dụng iphone của tôi. Khi ứng dụng khởi chạy lần đầu tiên, tệp nén này cần phải được di chuyển/sao chép vào thư mục Documents và giải nén nó ở đó. Sau đó, người dùng có thể thêm các tệp khác vào đường dẫn này từ ứng dụng. Ai đó có thể đề nghị làm thế nào tôi có thể đạt được điều này?iPhone SDK - Thêm nội dung đã nén vào tài nguyên và sau đó giải nén vào thư mục Tài liệu

Cảm ơn!

+0

Một hạn chế nhỏ với các phương pháp dưới đây, cho đến nay, là bạn đang chiếm gấp đôi không gian để lưu trữ các tài nguyên này; một bản sao làm cho ứng dụng của bạn lớn hơn và một bản sao thứ hai nằm trong thư mục Tài liệu. Bạn có thể muốn suy nghĩ về việc liệu bạn có thể sống với một bản sao hay không. Tôi đoán câu hỏi đặt ra là liệu bạn có mong đợi các tài nguyên này được đọc/ghi hoặc chỉ đọc hay không. Nếu sau này, sau đó tôi sẽ đề nghị bạn tìm một cách xung quanh sự cần thiết phải sao chép chúng. – mahboudz

+0

Nếu chỉ đọc, nhưng bạn muốn chúng trong thư mục Tài liệu vì người dùng có thể thêm một số tệp khác ở đó và bạn muốn tất cả chúng ở cùng một nơi, thì tôi khuyên bạn nên sử dụng liên kết tượng trưng thay vì sao chép tệp. – mahboudz

Trả lời

6

Dựa trên nhận xét của bạn ở trên:

Lý do tôi muốn thêm một tài nguyên nén vì có nhiều tập tin. Nếu tôi không nén thì tôi sẽ cần di chuyển các tệp riêng lẻ. Tôi sẽ cũng cần duy trì danh sách các tệp ở đâu đó để tôi có thể đọc tên tệp và sau đó di chuyển chúng. Tôi nghĩ rằng việc nén và giải nén là giải pháp đơn giản hơn .

Bạn có thể thêm tất cả các tệp vào thư mục trong gói của mình. Khi ứng dụng khởi chạy lần đầu tiên, hãy sử dụng liệt kê nhanh để chạy qua thư mục và những gì nó được tìm thấy trong thư mục đó, nó sẽ sao chép vào thư mục Documents. Xử lý các thư mục trong các thư mục hơi phức tạp hơn (có thể thêm đệ quy). Bằng cách này bạn không phải lo lắng về zip hoặc tar, cũng không phải giữ một thư mục của các tập tin để cài đặt.

Chỉ cần đặt thư mục của tệp bạn muốn vào thư mục tài nguyên của Xcode và yêu cầu nhập thư mục dưới dạng một thư mục không phải là nhóm. Bằng cách đó, các tệp được cài đặt trong tài nguyên của bạn bên trong một thư mục thay vì chỉ là các tệp riêng lẻ trên toàn bộ địa điểm.

EDIT:

chưa

tốt hơn, làm những gì tôi nói về việc đưa tất cả các file mà bạn muốn trong một thư mục, thêm vào dự án của bạn, nhưng không phải là "Tập đoàn", và sau đó tại sử dụng khởi động đầu tiên:

[[NSFileManager defaultManager] copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error]; 

và nó sẽ sao chép toàn bộ thư mục của bạn từ địa điểm này sang địa điểm khác. DỄ DÀNG!

4

Thêm khung libz.dylib vào dự án của bạn và bao gồm Deusty's NSData gzip category sẽ cung cấp cho bạn phương pháp nén/giải nén.

+0

Không cần thiết phải giải nén tất cả các tệp để lưu trữ tạm thời, nếu có thể giải nén các tệp đơn (vào tệp hoặc, tốt nhất là tới NSData) theo yêu cầu (lưu trữ zip nén từng tệp nguồn và giữ phân cấp thư mục gốc). Không biết về một lib tương thích với iPhone tốt mà làm cho điều này dễ dàng mặc dù. – avocade

3

Trong khi điều này có sẵn bằng cách sử dụng libz.dylib, nó thực sự là không cần thiết vì nó giúp bạn tiết kiệm ít (nếu có) không gian. Gói ứng dụng của bạn đã được nén khi được chuyển sang điện thoại. Nén trên đầu nén thường mang lại ít nén hơn.

Tự mình thử. Bạn có thể thấy rằng việc vận chuyển ứng dụng của mình bằng nội dung đã giải nén có thể chiếm nhiều không gian như nội dung được nén.

+0

Lý do tôi muốn thêm tài nguyên nén vì có nhiều tệp. Nếu tôi không nén thì tôi sẽ cần phải di chuyển các tệp riêng lẻ. Tôi cũng sẽ cần phải duy trì một danh sách các tệp ở đâu đó để tôi có thể đọc tên tệp và sau đó di chuyển chúng. Tôi nghĩ rằng nén và giải nén là một giải pháp đơn giản hơn. – Mithin

+0

Bạn có thể sử dụng 'libtar' (http://www.feep.net/libtar/) nếu bạn chỉ cần một cách để lưu trữ/hủy lưu trữ và không muốn thời gian phức tạp của tài nguyên' zip'-ped. –