2011-11-24 48 views
1

您好我最近与Leaves api工作,我有这个问题,我需要显示一个PDF文件,并且我的ViewController类有一个nib文件,我实现代码基于API示例代码但没有显示任何东西!我错过了什么吗?iPhone:实现Ole叶API

#import "BookViewController.h" 
#import "Utilities.h" 

@implementation BookViewController 



/////EDITED////////////// 


- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 
    if (self = [super initWithNibName:@"BookViewController" bundle:nil]) { 

     CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("paper.pdf"), NULL, NULL); 
     pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); 
     CFRelease(pdfURL); 

    } 
    return self; 
} 





- (void)dealloc { 
    CGPDFDocumentRelease(pdf); 
    [super dealloc]; 
} 



- (void) displayPageNumber:(NSUInteger)pageNumber { 
    self.navigationItem.title = [NSString stringWithFormat: 
           @"Page %u of %u", 
           pageNumber, 
           CGPDFDocumentGetNumberOfPages(pdf)]; 
} 



#pragma mark LeavesViewDelegate methods 

- (void) leavesView:(LeavesView *)leavesView willTurnToPageAtIndex:(NSUInteger)pageIndex { 
    [self displayPageNumber:pageIndex + 1]; 
} 



#pragma mark LeavesViewDataSource methods 

- (NSUInteger) numberOfPagesInLeavesView:(LeavesView*)leavesView { 
    return CGPDFDocumentGetNumberOfPages(pdf); 
} 

- (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx { 
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, index + 1); 
    CGAffineTransform transform = aspectFit(CGPDFPageGetBoxRect(page, kCGPDFMediaBox), 
              CGContextGetClipBoundingBox(ctx)); 
    CGContextConcatCTM(ctx, transform); 
    CGContextDrawPDFPage(ctx, page); 
} 


#pragma mark UIViewController 

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    leavesView.backgroundRendering = YES; 
    [self displayPageNumber:1]; 
} 

回答

1

你是如何实例化你的控制器的?

如果调用initWithNibName(我想你做,因为你说,它有一个笔尖文件),你完全跳过本地init方法(即一个在BookController的);因此,PDF处理根本没有初始化。

尝试将你的init方法重命名为initWithNibName,它应该工作;或者创建一个initWithNibName,并让它叫你init(谷歌为“指定构造函数”了解更多关于这种模式)。

注意的initWithNibName完整的签名是:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 

你有更多的选择,比如通过调用init(而不是initWithNibName)甚至创造一个方法setPDF,那么,在创建后创建控制器控制器以任何你喜欢的方式,你可以调用这个方法,这反过来调用initialize等...

编辑:如果你决定手动实例化控制器,不要忘记定义loadView

- (void)loadView { 
    [super loadView]; 
    if (leavesView) { 
     leavesView.frame = self.view.bounds; 
     leavesView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 
     [self.view addSubview:leavesView]; 
    } 
} 
+0

谢谢你,我将其更改为initWithNibName,但不会再改变任何东西,你会请参阅我的编辑的问题,并检查它 –

+0

有什么办法来加载PDF无榫文件?因为我的应用程序是Universal –

+0

,那么你需要一个'init'方法(而不是'initWithNibName'),那么当你需要它的时候显式地实例化它(从你的应用程序委托?),并将它的视图添加到它所属的位置你应用委托给主窗口)。你也需要在你的控制器中实现'loadView'(几秒钟后查看我的编辑) – sergio