2011-06-29 29 views
11

Tôi đang sử dụng NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) để có được những thư mục tài liệu ứng dụng trong ứng dụng của tôi, nhưng các mảng đó là quay trở lại chỉ chứa một đối tượng, và nó là một unwritable, không đúng thư mục:NSSearchPathForDirectoriesInDomains trả về thư mục sai

/Users/me/Thư viện/Hỗ trợ Ứng dụng/Trình mô phỏng/Tài liệu iPhone

Tôi đã tìm thấy this question cho biết vấn đề liên quan đến cấp phép, nhưng câu trả lời cho biết nhiều hơn thế. Vì vậy, tôi đoán tôi đang hỏi một câu hỏi trùng lặp, nhưng câu trả lời cho câu hỏi đó là không đủ, vì vậy tôi hy vọng sẽ nhận được một câu trả lời thực tế trong này.

+1

Câu trả lời cho câu hỏi đó thực sự là không thỏa đáng. Khi bạn tìm thấy giải pháp ở đây, vui lòng gắn cờ cho một mod để hợp nhất/đóng khác. –

+0

Giao diện điều khiển có hiển thị bất kỳ lỗi nào không? –

+0

Một số câu trả lời/nhận xét khác dường như chỉ ra rằng chức năng này thực sự có thể trả về một mảng với * nhiều hơn một thư mục *. Bạn có thể kiểm tra xem nó có được không? – jtbandes

Trả lời

7

Hmm ... do đó một lý do khiến thư mục được trả lại có thể khác với những gì bạn mong đợi cho một ứng dụng có thể liên quan đến loại mục tiêu Xcode. Điều này sẽ không xảy ra là một mục tiêu thử nghiệm phải không? trong trường hợp đó, câu trả lời đúng cũng có thể là câu trả lời với một GUID ứng dụng trong đó, vì thực tế nó không phải là một ứng dụng. Điều này google group discussion ngụ ý rằng nếu đây là trường hợp, bạn sẽ được tốt với chỉ cần tạo thư mục.

Chỉ dành cho nụ cười, tôi đã tạo thư mục/Người dùng/tôi/Thư viện/Hỗ trợ ứng dụng/Trình mô phỏng iPhone/Tài liệu từ cửa sổ đầu cuối và giờ nó xuất hiện để chạy. Vẫn có lỗi kiểm tra, nhưng những lỗi đó có thể là có thật.

tôi muốn khuyên bạn nên thay đổi ứng dụng thử nghiệm của bạn để tạo ra các thư mục tài liệu nếu nó mất tích - một cái gì đó như:

if(![[NSFileManager defaultManager] createDirectoryAtPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) withIntermediateDirectories:YES attributes:nil error:NULL]) 
     NSLog(@"Error: Create folder failed %@", NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)); 
2

này làm việc cho tôi:

[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
             inDomains:NSUserDomainMask] lastObject]; 
+1

Cảm ơn câu trả lời. Thật không may, URLForDirectory: inDomains: chỉ khả dụng trong iOS 4.0 trở lên và tôi đang hỗ trợ 3.1.3. Có cách nào khác để tìm thư mục này có sẵn trước 4.0 không? –

+1

Tôi không có câu trả lời cho bạn, nhưng tại sao bạn vẫn hỗ trợ 3.x? Không có điểm trong việc mất năng suất cho <5% người dùng. – vocaro

+0

Tôi đã thử phương pháp này nhưng có cùng một vấn đề. Nó cho tôi chính xác cùng thư mục với NSSearchPathForDirectoriesInDomains. –

1

Bạn có thể thử này:

/** 
Returns the path to the application's Documents directory. 
*/ 
- (NSString *)applicationDocumentsDirectory { 
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
} 

Tôi tin rằng bạn chỉ thiếu thông điệp lastObject.

+0

Cảm ơn. Đây là, trên thực tế, những gì tôi đang làm - NSString được trả về từ lastObject là đường dẫn không chính xác được chỉ định trong câu hỏi. –

+0

@Josh Brown Thư có trả về hơn 1 mục trong mảng không ?, bạn đã thử viết cho bất kỳ đường dẫn trả lại nào chưa? –

+0

@Josh Brown, sự cố cũng có thể xảy ra với chuỗi msgByAppendingPathComponent: nếu bạn không chuyển nó thành tên tệp hợp lệ. –

0

Tôi đang gặp vấn đề chính xác giống nhau, và trong trường hợp của tôi đó là vì tôi m chạy mã từ một lớp XCTest.

Tôi đoán là các thử nghiệm không chạy trong hộp cát ứng dụng.

Đó là vì các thử nghiệm của tôi liên quan đến dự án thư viện tĩnh, được bao gồm trong dự án chính.

Ngay sau khi tôi chạy cùng mã chính xác từ một lần chạy ứng dụng của tôi, các đường dẫn được trả về chính xác.

Hy vọng điều này sẽ hữu ích.

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