2016-05-04 28 views
5

Tôi muốn tạo pdf trong thư mục tài liệu và muốn cung cấp số trang cho nên tôi cần đối tượng CGPDFDocumentRef.Whash whille Chuyển đổi NSURL sang CFURL

let fileName: NSString = "test.pdf" 

let path:NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 

let documentDirectory: AnyObject = path.objectAtIndex(0) 

let pdfPathWithFileName = documentDirectory.stringByAppendingPathComponent(fileName as String) 

UIGraphicsBeginPDFContextToFile(pdfPathWithFileName as String, CGRectZero, nil) 

let ref : CGContextRef = UIGraphicsGetCurrentContext()! 

let localUrl = NSURL.fileURLWithPath(pdfPathWithFileName) 

Tôi đã chuyển đổi đường dẫn tệp trong url nhưng dòng dưới đây tạo ra sự cố và tôi không biết tại sao ..?

let pdfDocumentRef: CGPDFDocumentRef = CGPDFDocumentCreateWithURL(localUrl as CFURLRef)! 
+0

Bạn có bất kỳ đầu ra nào từ sự cố không? Ngoài ra, hãy thử giải nén 'localUrl thành CFURLRef' thành một dòng riêng biệt và xem đó có phải là' nil' hay không bởi bất kỳ cơ hội nào, tôi đoán rằng đây là nơi bạn gặp sự cố. – pbodsk

+0

@pbodsk: Có, nó trả về nil và tôi không biết tại sao ..? dòng này trả về CGPDFDocumentCreateWithURL (localUrl là CFURLRef)! không. Mặc dù localUrl có đường dẫn tệp. –

+0

Trong Swift, bạn không cần phải đặt tên rõ ràng kiểu mà một biến là nếu Swift có thể suy ra kiểu. Ví dụ, 'let path: NSArray = NSSearchPathForDirectoriesInDomains (.DocumentDirectory, .UserDomainMask, true)' có thể dễ dàng được biểu diễn như là 'let path = NSSearchPathForDirectoriesInDomains (.DocumentDirectory, .UserDomainMask, true)', với phần thưởng thêm của Swift biết các kiểu được sử dụng bởi mảng là một 'Chuỗi'. – MaddTheSane

Trả lời

0

Bởi vì test.pdf của bạn không có trong thư mục thư mục tài liệu.

+0

Không, tôi đã thử nghiệm rồi. Test.pdf được tạo ra mỗi khi tôi chạy ứng dụng. –

0
let localUrl = pdfPathWithFileName as CFStringRef 
let pdfDocumentRef = CFURLCreateWithFileSystemPath(nil, localUrl, CFURLPathStyle.CFURLPOSIXPathStyle, false) 
let page_count = CGPDFDocumentGetNumberOfPages(pdfDocumentRef) 
+0

Nó không sụp đổ w/mã của bạn nhưng pdfDocumentRef trả về nil. –

+0

Vui lòng hiển thị cho chúng tôi nhật ký sự cố. –

+0

Bây giờ nó sẽ làm việc, nếu NSURL không chuyển đổi, chỉ cần cố gắng chuyển đổi chuỗi trước .. –

0

Vì vậy, có vẻ như phần NSURL(fileURLWithPath: pdfPathWithFileName) as CFURLRef của bạn không thành công và đó là nguyên nhân gây ra sự cố của bạn.

tôi chỉ thấy điều này trong documentation about CFURL

CFURL thất bại trong việc tạo ra một đối tượng nếu chuỗi thông qua được tạo không đúng (có nghĩa là, nếu nó không phù hợp với RFC 2396). Ví dụ về các trường hợp sẽ không thành công là các chuỗi chứa ký tự khoảng trắng và ký tự bit cao. Nếu một hàm không tạo được đối tượng CFURL, nó trả về NULL, mà bạn phải chuẩn bị để xử lý. Nếu bạn tạo đối tượng CFURL bằng cách sử dụng đường dẫn hệ thống tệp, bạn nên sử dụng các hàm CFURLCreateFromFileSystemRepresentation và CFURLCreateFromFileSystemRepresentationRelativeToBase, xử lý sự khác biệt tinh tế giữa đường dẫn URL và đường dẫn hệ thống tệp.

this question có vẻ là về cùng một vấn đề. Dưới dạng one of the answers đề xuất:

Bạn cần chuyển đổi NSString thành CFStringRef rồi gọi CFURLCreateWithFileSystemPath;

Hy vọng sẽ giúp bạn.

+0

Như bạn thấy trong mã của tôi, tôi đã sử dụng fileUrlWithPath. –

+0

và giá trị của 'localUrl' là gì? – pbodsk

+0

tệp: ///Users/anil.kukadeja/Library/Developer/CoreSimulator/Devices/AC107F46-79C0-49B6-9773-0BB0672E8902/data/Containers/Data/Application/7BE0B88F-45A0-45BB-B01F-A41F18D7A2FF/Documents/ test.pdf –