2012-02-17 43 views
37

Tôi đang cố gắng tải một số tệp .applescript trong dự án của mình.pathForResource trả về null

sao chép chúng vào "Hỗ trợ Files" thư mục như thế này:

enter image description here

và cố gắng để truy cập chúng:

NSBundle *bundle = [NSBundle mainBundle]; 
NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript"]); 

pathForResource luôn trả về null.

Cả hai tệp đều được nhập chính xác trong xcode. Thành viên mục tiêu là ứng dụng của tôi. Các giải pháp từ các câu hỏi tương tự không thực sự giúp ích

Tôi đang làm gì sai?

Trả lời

138

Trong mục tiêu Xcode "Xây dựng giai đoạn" add file dưới "Copy Bundle Tài""

+0

đơn giản và chính xác những gì tôi đã bỏ lỡ. cảm ơn! – dvcrn

+1

Kéo/thả vẫn bị hỏng trong Xcode 4.5 :(- ví dụ: kéo các bóng râm OpenGL của Apple từ Finder đến một dự án không thể thêm chúng vào giai đoạn Sao chép tài nguyên (tại sao? Chắc chắn điều này không khó cho Apple thực hiện!). – Adam

+1

Cảm ơn Zaph Bạn đã lưu lại ngày còn lại của tôi –

0

Liệu hình ảnh của bạn cho rằng tập tin đó trong một số thư mục

Hãy thử pathForResource:ofType:inDirectory: phương pháp trong trường hợp này:.?

NSLog(@"Resource path for test.applescript: %@", [bundle pathForResource:@"test" ofType:@"applescript" inDirectory:@"folder/Supporting Files"); 
0

Ngoài những gì Zaph nói, hãy chắc chắn rằng bạn đang không chạy trong 'phát hành' chế độ.

có một thời gian mà tôi cho phải thay đổi thiết lập đó, và các biểu tượng bị tước đi, do đó làm cho NSBundle không thể giải quyết được đường dẫn.

1

Phản hồi tuyệt vời từ Zaph ở trên, nhưng tôi nhận thấy khi tôi đang thực hiện nó có cách nhanh hơn, ít nhất là trong Xcode 6.1.

nếu bạn nhấp một lần vào tệp (ví dụ: test.applescript) và mở menu Xcode phù hợp, bạn sẽ thấy phần có tên "Target Membership". Đảm bảo rằng mục tiêu phù hợp (như trong bạn đang sử dụng tập lệnh với) được chọn và nó sẽ thực hiện công việc giống như thêm tệp trong "Sao chép tài nguyên gói"

Ngoài ra, không hoàn toàn phù hợp nhưng trường hợp bạn đang tải từ nhiều nơi khác nhau hoặc bạn đang kế thừa lớp này. Bạn không nên thực sự sử dụng

[NSBundle mainBundle];

thay vì sử dụng

[NSBundle bundleForClass:[self class]]; 

Điều đó có nghĩa bạn không cần phải lo lắng về việc bạn đang ở đâu trên phương pháp gọi nó sẽ lấy nguồn từ các mục thích hợp gắn liền với mục tiêu mà bạn đang chạy. Tuyệt vời cho việc thực hiện các thư viện và các cuộc gọi tái sử dụng;)

4

Đối với tất cả những người vẫn đang nhận được đường dẫn nil và tệp được thêm vào "Sao chép tài nguyên gói", chỉ cần xóa tệp khỏi Tài nguyên gói bản sao và thêm lại.

+0

chính xác những gì tôi cần ... – code4j