2012-02-11 36 views
48

Tôi có một từ điển NSMutable có chứa ID tệp và tên tệp + đuôi của chúng trong dạng đơn giản của fileone.doc hoặc filetwo.pdf. Tôi cần phải xác định loại tập tin đó là để hiển thị chính xác một biểu tượng liên quan trong UITableView của tôi. Đây là những gì tôi đã làm cho đến nay.Tải phần mở rộng của một tập tin chứa trong NSString

NSString *docInfo = [NSString stringWithFormat:@"%d", indexPath.row]; //Determine what cell we are formatting 
NSString *fileType = [contentFiles objectForKey:docInfo]; //Store the file name in a string 

Tôi đã viết hai regex để xác định loại tệp tôi đang xem, nhưng chúng không bao giờ trả lại kết quả tích cực. Tôi đã không sử dụng regex trong lập trình iOS trước đây, vì vậy tôi không hoàn toàn chắc chắn nếu tôi làm điều đó đúng, nhưng tôi về cơ bản đã sao chép mã từ trang Mô tả lớp.

NSError *error = NULL; 
NSRegularExpression *regexPDF = [NSRegularExpression regularExpressionWithPattern:@"/^.*\\.pdf$/" options:NSRegularExpressionCaseInsensitive error:&error]; 
NSRegularExpression *regexDOC = [NSRegularExpression regularExpressionWithPattern:@"/^.*\\.(doc|docx)$/" options:NSRegularExpressionCaseInsensitive error:&error]; 
    NSUInteger numMatch = [regexPDF numberOfMatchesInString:fileType options:0 range:NSMakeRange(0, [fileType length])]; 
    NSLog(@"How many matches were found? %@", numMatch); 

Câu hỏi của tôi là, có cách nào dễ dàng hơn để thực hiện việc này không? Nếu không, regex của tôi có đúng không? Và cuối cùng nếu tôi phải sử dụng điều này, thì có tốn kém trong thời gian chạy không? Tôi không biết số lượng tệp trung bình mà người dùng sẽ có.

Cảm ơn bạn.

Trả lời

143

Bạn đang tìm kiếm [fileType pathExtension]

NSString Documentation: pathExtension

+1

Ồ, không biết rằng NSString có thuộc tính 'pathExtension' – remy

+4

Objective-C chỉ làm cho mọi thứ dễ dàng như vậy; Tôi không cần phải nghĩ đến những giải pháp khó như vậy! Cảm ơn bạn David. – TheJer

+3

Im vui vì tôi đã không thử và tự mình làm chức năng này – Will

6
//NSURL *url = [NSURL URLWithString: fileType]; 
NSLog(@"extension: %@", [fileType pathExtension]); 

Sửa bạn có thể sử dụng pathExtension trên NSString

Nhờ David Barry

+0

Bạn có thể gọi pathExtension trực tiếp trên String, không cần phải tạo ra một NSURL đầu tiên. –

+3

Tại sao bạn chỉ trích câu trả lời ở trên và sau đó ghi có anh ta? –

3

Hãy thử sử dụng [filetype pathExtension] để lấy phần mở rộng của tập tin.

4

Hãy thử điều này:

NSString *fileName = @"resume.doc"; 
NSString *ext = [fileName pathExtension]; 
0

Trong Swift 3 bạn có thể sử dụng một phần mở rộng:

extension String { 

public func getExtension() -> String? { 

     let ext = (self as NSString).pathExtension 

     if ext.isEmpty { 
      return nil 
     } 

     return ext 
    } 
} 
0

Hãy thử điều này, nó làm việc cho tôi.

NSString *fileName = @"yourFileName.pdf"; 
NSString *ext = [fileName pathExtension]; 

Documentation vào đây để NSString pathExtension

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