2011-10-28 33 views
16

Tôi có một ứng dụng có một số hình ảnh. Tôi muốn kiểm tra xem một hình ảnh có tồn tại trong gói không. Nếu tôi hiển thị nó, nếu không tôi sẽ hiển thị một hình ảnh thay thế.Kiểm tra xem hình ảnh có tồn tại trong gói không - iPhone

Mã dưới đây là những gì tôi đã đưa ra, tuy nhiên nó không hoạt động. Bất cứ ai có thể phát hiện ra những gì là sai?

Cảm ơn bạn!

NSString * photo = [NSString stringWithFormat:@"%d.jpg", UniqueID];  

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:photo]; 
if([fileManager fileExistsAtPath:path]) 
{ 

    [image setImage:[UIImage imageNamed:photo]]; 
} 

else { 

    NSLog(@"Hello"); 

    [image setImage:[UIImage imageNamed:@"iPhoneHD.png"]]; 

} 

EDIT - Thay đổi sau bài đăng của Simon dưới đây, tuy nhiên vẫn không hoạt động chính xác. Câu lệnh khác luôn kích hoạt.

Trả lời

22

Bạn đang tìm trong thư mục Tài liệu của ứng dụng của bạn. Đây có thực sự là nơi bạn đang mong đợi để tìm thấy những hình ảnh? Nếu chúng thực sự là các tài nguyên được thêm vào nhóm của bạn thì bạn cần thực hiện việc này:

NSString *path = [[NSBundle mainBundle] pathForResource:uniqueID ofType:@"jpg"]; 

Dễ dàng hơn - chỉ cần thử tải hình ảnh đã đặt tên. Nếu nó vẫn thất bại sau đó tải mặc định:

UIImage *tempImage = [UIImage imageNamed:photo]; 

if (!tempImage) { 
    tempImage = [UIImage imageNamed:@"iPhoneHD.jpg"] 
} 

[image setImage:tempImage]; 
+0

Phản hồi đã chỉnh sửa để xác nhận xem bạn có thực sự muốn xem trong thư mục Tài liệu hay bạn thực sự muốn gói ứng dụng của mình. –

+0

Cảm ơn - công trình này. – GuybrushThreepwood

6

Bạn có câu lệnh if một cách sai lầm, bạn đang nói nếu nó không tồn tại, sau đó sử dụng nó, nếu không sử dụng một mặc định ..... bạn muốn ...

if([fileManager fileExistsAtPath:path]) 
+0

Xin chào Simon. Cảm ơn nhưng nó vẫn không hoạt động. Câu lệnh khác được kích hoạt mọi lúc, ngay cả khi tệp tồn tại. – GuybrushThreepwood

+0

Nó chắc chắn sẽ hoạt động. Điều này là bạn không thể chỉ cần vượt qua trong tên tập tin như đường dẫn. Bạn cần một cái gì đó như thế này: [[NSBundle mainBundle] pathForResource: @ "tên tệp" ofType: @ "png"] –

14
+(BOOL) fileExistsInProject:(NSString *)fileName 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *fileInResourcesFolder = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName]; 
    return [fileManager fileExistsAtPath:fileInResourcesFolder]; 
} 

là câu trả lời của tôi.


trả về CÓ nếu tệp tồn tại trong gói.Bạn không phải làm bất cứ điều gì với đường dẫn. chỉ cần nói [fileExistsInProject: @ "blabla.ext"]

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