我有一个应用程序,我有一个很长的例程来绘制一个PDF文档。我需要从许多视图控制器访问这个,但我不知道如何。就在代码被复制到每个VC的.m文件的时候,我知道这是荒谬的。其中一个问题是每个VC都有大量需要发送到MakePdf例程的变量,并且在VC之间发送数据似乎存在问题(或者至少这是我开始理解的)。在视图控制器之间共享一个例程
任何指针?
这是我想什么:
我有一个应用程序,我有一个很长的例程来绘制一个PDF文档。我需要从许多视图控制器访问这个,但我不知道如何。就在代码被复制到每个VC的.m文件的时候,我知道这是荒谬的。其中一个问题是每个VC都有大量需要发送到MakePdf例程的变量,并且在VC之间发送数据似乎存在问题(或者至少这是我开始理解的)。在视图控制器之间共享一个例程
任何指针?
这是我想什么:
你应该做一个一流的,具有特殊方法(如“+共享对象”)的所有代码。 然后你使用此代码访问它:
[[MyClass sharedObject] mySharedMethodForPdf];
http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/
谢谢 - 我刚刚开始这样做,但我可以将VC1中的变量名称放在共享类中,以便在从VC1访问它时包含它?或者我需要将变量发送到共享类吗? – RGriffiths
我认为你必须把所有关于pdf的逻辑放在共享对象中,并且通过这个方法给它提供动态数据。 –
也许你认为需要访问这个方法(和任何其他人),将实现该功能的类的子类的所有视图控制器。然后他们会继承make pdf代码。
我一定会创建一个抽象的UIViewController类,它至少包含共同特征或协议,如<PDFMakerDataSource>
。
PDFMaker
单身可以很好,在PDFMaker上定义一个activeViewController
属性。 所以当VC出现时,我会设置该属性,然后您可以在PDFMaker上调用make,它将使用当前绑定的VC作为数据源。
无论如何,为什么单身? 为什么不只是创建一个PDFMaker对象?您可以使用每个VC创建它,因此每个VC应该有一个它的实例。
喜欢的东西:
@interface PDFMaker : NSObject
+(id)pdfMakerWithDataSource:(id<PDFMakerDataSource>) dataSource;
-(void)makePDFwithCompletion:(void(^)(id PDF)) completionBlock;
@end
和数据源,如:
@protocol PDFMakerDataSource <NSObject>
@optional
-(NSString*)fileName;
-(UIImage*)coverImage;
-(NSString*)whateverData;
@end
因此,在世界的每一个VC可现在PDFMaker的compilant,如:
@interface SomeViewController : UIViewController <PDFMakerDataSource>
@property (nonatomic, strong) PDFMaker *pdfMaker;
@end
@implementation SomeViewController
-(void)viewDidLoad
{
[super viewDidLoad];
self.pdfMake = [PDFMaker pdfMakerWithDataSource:self];
}
// PDFMaker data source implementation (bind to UI for example)
-(NSString*)fileName
{ return self.fileNameTextField.text; }
-(NSString*)coverImage
{ return self.coverImageView.image; }
...
// Make That PDF
-(IBAction)makePDF
{
[self.pdfMaker makePDFwithCompletion:^(id PDF)
{ NSLog(@"Shiny PDF just made: %@", PDF); }
}
@end
您是否需要创建PDF时来自每个VC的每个数据?或者每个VC创建一个PDF? – Geri