【发布时间】:2016-01-12 18:17:50
【问题描述】:
我这里有这个方法,它可以创建 PDF 和 PDF 的 URL。我的问题是我正在尝试返回 PDF 的 NSData,但是当我尝试在方法结束时它返回 nil。为什么它返回 nil ?我该如何解决这个问题?
- (NSData *) setProductionSchedulePDF
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filename = @"test.pdf";
NSURL *fileURL = [NSURL fileURLWithPathComponents:[NSArray arrayWithObjects:documentsDirectory, filename, nil]];
CGContextRef pdfContext = CGPDFContextCreateWithURL((CFURLRef)fileURL, NULL, NULL);
CGPDFContextBeginPage(pdfContext, NULL);
UIGraphicsPushContext(pdfContext);
CGRect bounds = CGContextGetClipBoundingBox(pdfContext);
CGContextScaleCTM(pdfContext, 1.0, -1.0);
CGContextTranslateCTM(pdfContext, 0.0, -bounds.size.height);
NSArray *taskArray = self.taskData;
UIFont *headerFont = [UIFont fontWithName:@"Arial" size:8];
UIFont *font = [UIFont fontWithName:@"Arial" size:6];
NSDictionary *attributes = @{ NSFontAttributeName: font};
NSDictionary *headerAttributes = @{ NSFontAttributeName: headerFont};
[@"Task" drawAtPoint:CGPointMake(10, 10) withAttributes:headerAttributes];
int counter = 0;
for (id object in taskArray) {
[object drawAtPoint:CGPointMake(10, 10.5 * counter + 30) withAttributes:attributes];
counter++;
}
int keyCounter = 0;
for(id object in self.prodSchedSortedKeys) {
[object drawAtPoint:CGPointMake(60 * keyCounter + 90, 10) withAttributes:headerAttributes];
NSArray *bfsmArray;
if([finalProductionSchedule count]!=0)
{
bfsmArray = [finalProductionSchedule valueForKey:object];
}
else
{
bfsmArray = nil;
}
bfsmArray = nil;
int valueCounter = 0;
for(id object2 in bfsmArray)
{
if(bfsmArray != nil)
{
if(valueCounter == 13 || valueCounter == 66 || valueCounter == 67){
[[bfsmArray objectAtIndex:valueCounter] drawAtPoint:CGPointMake(60 * keyCounter + 90, 10.5 * valueCounter + 30) withAttributes:attributes];
}
else if (valueCounter == 68 || valueCounter == 69)
{
[[[bfsmArray objectAtIndex:valueCounter] baseLineStart] drawAtPoint:CGPointMake(60 * keyCounter + 90, 10.5 * valueCounter + 30) withAttributes:attributes];
}
else
{
if([[[bfsmArray objectAtIndex:valueCounter] baseLineStart] isEqualToString:@""] && [[[bfsmArray objectAtIndex:valueCounter] actualFinish] isEqualToString:@""]){
}
else
{
[[NSString stringWithFormat:@"%@ / %@",[[bfsmArray objectAtIndex:valueCounter] baseLineStart],[[bfsmArray objectAtIndex:valueCounter] actualFinish]] drawAtPoint:CGPointMake(60 * keyCounter + 90, 10.5 * valueCounter + 30) withAttributes:attributes];
}
}
}
NSLog(@"%@", object2);
valueCounter++;
}
keyCounter++;
}
UIGraphicsPopContext();
CGPDFContextEndPage(pdfContext);
CGPDFContextClose(pdfContext);
NSString *myString = [fileURL absoluteString];
NSData *pdfData = [NSData dataWithContentsOfFile:myString];
return pdfData;
}
更新
我像这样添加了 NSError:
NSError *error;
NSData *pdfData = [NSData dataWithContentsOfFile:myString options:nil error:&error];
NSLog(@"%@", error);
并且 NSError 返回以下内容:
error NSError * domain: @"NSCocoaErrorDomain" - code: 260 0x16820310
这是错误的控制台日志:
Error Domain=NSCocoaErrorDomain Code=260 "The file “test.pdf” couldn’t be opened because there is no such file." UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/A2C316BA-97DF-4560-8F6D-BA6A15B2CCA3/Documents/test.pdf, NSUnderlyingError=0x155420e0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
【问题讨论】:
-
文件是否存在于
fileURL?注意:绝对文件 URL 的名称必须比myString更好。 -
如何使用
dataWithContentsOfFile:options:error:版本的调用来查看错误是什么? -
您是否尝试过调试其中的任何部分?
fileURL是什么?它存在吗? -
我用错误日志更新了我的问题
-
该文件应该存在。因为它是在方法的开头创建的
标签: ios objective-c pdf nsdata