2009-12-31 38 views
17

Đây là những gì tôi đang làm, khi tôi tạo một hình ảnh với đường dẫn trong gói:pathForResource? mà không sử dụng phần mở rộng (Iphone)


UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]]; 

Những gì tôi muốn làm là cố gắng để tìm ra con đường cho hình ảnh của tôi, nhưng mà không sử dụng phần mở rộng, mà không sử dụng 'ofType' (vì tên của hình ảnh của tôi và phần mở rộng của cô là cửa hàng trong cơ sở dữ liệu của tôi) một cái gì đó như thế:


UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.jpg"]]; 

Nhưng tôi không biết làm thế nào để làm điều đó.

Trân trọng,

Trả lời

41

Tại sao bạn không tách chuỗi mà bạn nhận được từ DB?

NSString* fullFileName = @"image.jpg"; 
NSString* fileName = [[fullFileName lastPathComponent] stringByDeletingPathExtension]; 
NSString* extension = [fullFileName pathExtension]; 

Bây giờ bạn chỉ có thể sử dụng:

[[NSBundle mainBundle] pathForResource:fileName ofType:extension]]; 
+0

Tôi sẽ cố gắng ngay khi về nhà. cảm ơn bạn ~ – ludo

+0

hoạt động tuyệt vời! – rocky

+2

Bạn không cần phải tách riêng phần mở rộng. Xem câu trả lời của tôi. Tôi không biết nếu có bất kỳ tác động hiệu suất bằng cách sử dụng cách tiếp cận của tôi tuy nhiên. –

0

Cách đơn giản nhất là để lưu trữ tên và loại tập tin trong cơ sở dữ liệu của bạn một cách riêng biệt, và lấy chúng bằng cách sử dụng method.I'm đầu tiên không phải chắc chắn rằng bạn có thể thành công trong việc thực hiện một trong những thứ hai .

+0

Tôi đã suy nghĩ về điều đó, nhưng việc tạo cột trong cơ sở dữ liệu của tôi chỉ dành cho tiện ích mở rộng Tôi không biết nếu nó là cách tốt nhất – ludo

2
- (NSData *)applicationDataFromFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease]; 
    return myData; 
} 

lấy từ http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/FilesandNetworking/FilesandNetworking.html#//apple_ref/doc/uid/TP40007072-CH21-SW21

thể dễ dàng thích nghi nếu bạn muốn nó trở lại một UIImage thay vì một NSData.

Ngoài ra, bạn không nói nếu bạn đang lưu hình ảnh vào thư mục tài liệu hoặc thêm chúng vào gói ứng dụng của bạn trước khi biên soạn. bởi vì nếu đó là sau này, bạn có thể sử dụng [UIImage imageNamed:(NSString *)filename] để có được hình ảnh. Nó mong đợi một phần mở rộng như là một phần của tên tập tin.

+0

Tệp được thêm trước khi biên dịch. cảm ơn cho câu trả lời – ludo

0

Tôi thấy rằng với phần mở rộng là ".jpg", bạn cần sử dụng loại cho tiện ích mở rộng để ứng dụng hoạt động trên iPod Touch, trong khi có phần mở rộng là ".png", tôi có thể đặt "hình ảnh". png "trong pathForResource và nói ofType: nil. Nhưng tất cả các phiên bản đều hoạt động trên trình mô phỏng.

Các gói ứng dụng có chứa các tập tin hình ảnh, và tôi đang sử dụng:

[[NSBundle mainBundle] pathForResource:@"Auto" ofType:@"jpg"] 

để có được một con đường.

20

Bạn có thể dễ dàng sử dụng phương pháp NSBundle mà không vượt qua phần mở rộng, chỉ cần vượt qua nil để mở rộng.

[[NSBundle mainBundle] pathForResource:@"image.jpg" ofType:nil]; 
+1

Điều này nên là câu trả lời ngoại trừ IMHO vì nó thanh lịch hơn và cho điểm. Tôi không chắc tại sao táo lại kiên quyết tách biệt phần mở rộng. – TalL

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