2012-02-06 28 views
10

Tôi đã cố gắng tải một tệp văn bản đơn giản trong một bài kiểm tra đơn vị cho một ứng dụng iOS.NSBundle pathForResource trả về nil

NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"]; 
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath]; 

Vấn đề của tôi là đường dẫnĐể trở về nil.

Tệp stopPointsInCircleData.txt nằm trong thư mục của mã kiểm tra và tệp được liệt kê chính xác trong "Sao chép tài nguyên gói" trong "Giai đoạn xây dựng" của mục tiêu thử nghiệm.

Tôi đã cố gắng để thư giãn tìm kiếm bằng cách đặt TypeType thành nil, nhưng thet cũng không hoạt động.

Bất kỳ trợ giúp nào được thực hiện rất nhiều.

+0

Có thể đơn giản hơn để đặt đường dẫn theo cách thủ công không? 'NSHomeDirectory()' sẽ giúp bạn – Nekto

+0

có thể vì nó không phải là txt .. bạn đã kiểm tra định dạng tập tin .... nó có thể là cái gì khác ..rtf? – Shubhank

Trả lời

27

Vấn đề của bạn là trong một mục tiêu thử nghiệm đơn vị, -mainBundle không tham chiếu đến gói đích thử nghiệm mà thay vào đó là gói thực thi mà mục tiêu thử nghiệm được tiêm vào. Trong trường hợp mục tiêu thử nghiệm ios, đây là gói ứng dụng của bạn; trong mục tiêu kiểm tra Mac, nó có thể là gói ứng dụng hoặc nhân vật OCUnit.

Bạn nên tìm kiếm tài nguyên trong gói của mục tiêu thử nghiệm. Bên trong một lớp học thử nghiệm, nó được thực hiện như thế này:

NSBundle *myBundle = [NSBundle bundleForClass: [self class]]; 
+0

'[self class]' không có tác dụng với tôi. Tôi phải thay thế '[NAME_OF_TEST_CLASS class]'. –

+0

Nếu bạn cần phải đặt mã như thế này * bên ngoài * lớp kiểm tra, bạn có thể sử dụng '[NSBundle bundleForClass: NSClassFromString (@" MyTestClassName ")]' – CommaToast

5

Có cách đơn giản để đạt được điều đó, bạn có thể bắt chước mà bó đường dẫn:

Chỉ cần đầu đến

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) và chỉ cần chèn:

$(BUILT_PRODUCTS_DIR)/AppName.app 

Kiểm tra hạnh phúc.

+1

Tôi tin rằng câu trả lời này là tốt hơn sau đó chấp nhận! –

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