2011-08-10 41 views
5

Tôi đang gặp sự cố thực sự lạ với ứng dụng iPad mà tôi đang viết. Khi khởi động, tôi muốn sao chép một thư mục chứa một vài thư mục khác (trống) từ gói ứng dụng vào thư mục Documents. Thư mục được sao chép, được gọi là 'flds' (tất cả chữ thường), được thêm vào dự án Xcode 4 bằng cách sử dụng 'Tạo thư mục tham chiếu cho bất kỳ thư mục được thêm nào' và tôi đã kiểm tra xem nó có thực sự là một phần của tệp .app sau khi biên dịch hay không. (Và rằng nó không tồn tại khi cố gắng sao chép.)Không tìm thấy thư mục NSBundle trên thiết bị nhưng hoạt động trong trình mô phỏng

tôi đã cố gắng nhận được vào thư mục 'giáo phái FLDS' bằng cách sử dụng một trong những cuộc gọi (tất cả họ đều làm việc):

[[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"flds"] 
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flds"] 
[[NSBundle mainBundle] pathForResource:@"flds" ofType:@""] 

Sau đó, sao chép bằng phương pháp copyItemAtPath:toPath:error: của NSFileManager (hoặc URL tương đương khi sử dụng URL thay vì chuỗi đường dẫn).

Tất cả các chiến lược này hoạt động hoàn hảo trong Trình mô phỏng iPad và trên thiết bị iPad, với ngoại lệ sau: Khi tôi (thành công) tạo bản phân phối Ad Hoc, kéo .app và .mobileprovision vào iTunes, đồng bộ và sau đó chạy ứng dụng trên thiết bị, hệ thống không còn nghĩ thư mục 'flds' tồn tại! Tôi đã cố gắng để kiểm tra điều này trong nhiều giờ, không có may mắn. Một lần nữa, tôi hoàn toàn chắc chắn nó hoạt động cả trong mô phỏng và trên thiết bị chạy từ Xcode, nhưng không phải khi được đồng bộ hóa thông qua iTunes.

Ý tưởng?

tôi phát hiện ra rằng cuộc gọi sau đây nhận được đường dẫn thư mục thành công cũng sau khi đồng bộ các ứng dụng iPad thông qua iTunes:

[[NSBundle mainBundle] pathForResource:@"flds" ofType:nil inDirectory:nil] 

Tuy nhiên, khi tôi sử dụng con đường này để sao chép các thư mục đến vị trí mới của mình trong thư mục Documents , chỉ có thư mục chính nó và tập tin .txt trong đó (mà tôi đặt trong đó như là một thử nghiệm, nó không thực sự nghĩa vụ phải có) được sao chép, và không phải là 6-7 thư mục con trống. Một lần nữa, cùng một mẫu cho thấy chính nó: Làm việc như mong đợi cả trên giả lập và thiết bị chạy từ Xcode (thư mục 'flds' với 'test.txt' và thư mục con rỗng được sao chép thành công), nhưng không được đồng bộ hóa qua iTunes (chỉ thư mục 'flds') với 'test.txt' được sao chép, không phải thư mục con). Đây thực sự là hành vi dự định của copyItemAtPath:toPath:error:? Và tại sao nó sẽ hoạt động khác sau khi đồng bộ hóa thông qua iTunes?

+0

Tôi không chắc chắn nếu bạn đã thử điều này, nhưng bạn đã kiểm tra xem thư mục fld tồn tại trong gói phiên bản cuối cùng (.app mà bạn kéo vào iTunes) bằng cách nhấp chuột phải vào ứng dụng và chọn Hiển thị gói Nội dung? Bạn sẽ có thể xác định vị trí các tập tin và thư mục bạn đang cố gắng truy cập ở đó thông qua công cụ tìm. – Mark

+0

Tôi đã thử điều đó. Thư mục chắc chắn là có. Tôi cũng đã thử đặt một tệp .txt vào một trong các thư mục con của 'flds' và truy cập nó thông qua pathForResource: ofType :, và nó thực sự hoạt động. Nhận được thư mục chính nó không. – hsdev

+0

Vui lòng kiểm tra xem bạn có đang sử dụng một tệp không có trong chính thiết bị đó không. Có thể bạn đã cố sử dụng tệp được lưu trên máy tính của mình. Nếu bạn không chắc chắn, hãy thử mở dự án của bạn từ một máy tính khác và xem nó có hoạt động hay không. – Sagiftw

Trả lời

0

Cuối cùng tôi đã tìm ra rằng copyItemAtPath:toPath:error: sẽ không sao chép các thư mục trống, mặc dù tôi nghĩ rằng nó được cho là. Và một lần nữa, hành vi này chỉ xảy ra sau khi đồng bộ ứng dụng với iPad thông qua iTunes (khi chạy từ Xcode nó đã sao chép các thư mục trống). Giải pháp của tôi trong thời gian này là chỉ cần đặt một tệp văn bản giả trong mỗi thư mục con, để chúng không còn trống nữa.

Các vấn đề liên quan