2009-05-26 35 views
6

Tôi có một ứng dụng iPhone trong đó một số đối tượng miền được điền bằng dữ liệu do người dùng nhập. Để khôi phục trạng thái sau khi bị gián đoạn, các đối tượng này thực hiện giao thức NSCoding và được ghi vào đĩa (thư mục Documents) trong thông báo applicationWillTerminate. Sau đó, khi ứng dụng được khởi chạy lại, các byte dữ liệu được tải lên và các đối tượng miền được repopulated. Mã để lấy thư mục tài liệu như sau:Làm cách nào để khắc phục lỗi Cocoa 513?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

Điều này làm việc tuyệt vời trong trình mô phỏng nhưng khi tôi triển khai ứng dụng cho iPhone, nó ngừng hoạt động. Lý do tại sao mã lỗi iPhone 513 - có nghĩa là "quyền bị từ chối". Có một lưu ý trong tài liệu dev iPhone mà giải thích thêm một chút -

Trên thiết bị, con đường trở (documentsDirectory) cũng tương tự như sau: /var/mobile/Applications/30B51836- D2DD-43AA-BCB4-9D4DADFED6A2/Documents

Tuy nhiên, trên Simulator, các con đường quay trở lại lấy hình thức sau đây:

/Volumes/Stuff/Users/johndoe/Library/Application Support /iPhone Simulator/User/Applications/118086A0-FAAF-4CD4-9A0F-CD5E8D287270/Documents

Đây là hành vi chính xác mà tôi nhìn thấy. Tôi không thực sự chắc chắn làm thế nào điều này liên quan đến việc nhận được một sự cho phép bị từ chối lỗi và những gì tôi có thể làm để sửa chữa nó. Nó nói dưới đây -

Để đọc và viết sở thích người dùng, sử dụng lớp NSUserDefaults hoặc CFPreferences API. Các giao diện này loại bỏ nhu cầu để bạn tạo đường dẫn đến thư mục Thư viện/Tuỳ chọn/và các tệp tùy chọn đọc và ghi trực tiếp. Để biết thêm thông tin về sử dụng các giao diện, xem “Thêm Bundle Cài đặt.”

Nếu ứng dụng của bạn có chứa âm thanh, hình ảnh, hoặc các nguồn lực khác trong gói ứng dụng, bạn nên sử dụng NSBundle lớp hoặc CFBundle đục nhập để tải các tài nguyên đó. Các gói có kiến ​​thức vốn có về nơi tài nguyên sống bên trong ứng dụng. Ngoài ra, các gói nhận thức được các tùy chọn ngôn ngữ của người dùng và là có thể tự động chọn tài nguyên được bản địa hóa trên tài nguyên mặc định. Để biết thêm thông tin về bó, xem “Ứng dụng Bundle.”

tôi không thấy làm thế nào tôi có thể sử dụng các gói ứng dụng để tải byte dữ liệu mặc dù. Bất kỳ trợ giúp hoặc ví dụ?

Trả lời

13

Không chắc chắn cách thức này hoạt động, nhưng rõ ràng bằng cách sử dụng stringByAppendingPathComponent thay vì stringByAppendingString để tạo đường dẫn khắc phục sự cố.

+1

Tôi nghĩ sự khác biệt là dấu gạch chéo ở cuối "Tài liệu". –

1

Đoạn liên quan đến các gói ứng dụng đề cập đến:

NSString *path = [[NSBundle mainBundle] pathForResource:@"somefile" ofType:@"png"]; 

này và các phương pháp từ NSBundle cho phép bạn tham khảo các nguồn lực từ bên trong gói ứng dụng mà không thực sự biết nơi gói ứng dụng nằm.

Tuyên bố từ chối trách nhiệm: Tôi chưa từng làm việc với iPhone.

Với tuyên bố từ chối trách nhiệm, trong OS X đơn giản, nó được coi là biểu mẫu không hợp lệ để viết nội dung bên trong gói ứng dụng. Bạn lưu nội dung theo thư mục Hỗ trợ ứng dụng của người dùng -> xem NSApplicationSupportDirectory.

0

Tôi gặp lỗi này (513) vì đường dẫn sai. Kiểm tra đường dẫn của tôi đã khắc phục được sự cố :)

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