我认为你应该遵循标准SDK中MFMailComposeViewController和其他几种模式。这意味着你的框架将提供公共类,是 UIViewController的一个子类。
#import <MyFramework/MyFrameworkViewController.h>
@interface CustomerViewController : UIViewController <MyFrameworkViewControllerDelegate>
@end
- (IBAction)pressedShowFrameworkVC:(id)sender {
MyFrameworkViewController *frameworkVC = [[MyFrameworkViewController alloc] init];
// your framework init can init from your bundle's nib
frameworkVC.delegate = self;
[self presentViewController:frameworkVC animated:YES completion:^{}];
}
当用户完成它时,您的框架vc会自行解散。
// MyFrameworkViewController.m
[self dismissViewControllerAnimated:YES completion^{
[self.delegate frameworkVC:self didFinishWithStuff:@"Done"];
}];
您的客户实现了这个...
- (void)frameworkVC:(MyFrameworkViewController *)frameworkVC didFinishWithStuff:(NSString *)objectDescribingCompletionState {
}
编辑 - 假设你的框架也需要做一些非视图控制器相关工作,为客户的应用程序。它仍然可以提供NSObject(或NSURLConnection或其他)的子类作为另一个公共类。
// CustomerViewController.m
#import <MyFramework/MyFrameworkWorkerBee.h>
- (IBAction)pressedMakeMyFrameworkDoSomethingUseful:(id)sender {
MyFrameworkWorkerBee *workerBee = [[MyFrameworkWorkerBee alloc] init];
[workerBee fetchStuffFromTheWebWithCompletion:^(id result) {
// now present results
MyFrameworkViewController *frameworkVC = [[MyFrameworkViewController alloc] init];
frameworkVC.delegate = self;
frameworkVC.resultsToPresent = results;
[self presentViewController:frameworkVC animated:YES completion:^{}];
}];
}
嗨,谢谢你的回复。但是,请考虑应用程序调用我的框架的场景。我想要的是该应用程序将自己设置为我的框架的委托,并告诉框架开始工作。然后,框架将与Web服务器通信以获取必须显示的数据。当数据到达时,框架应该在调用委托的视图上显示一个视图控制器,这是用户与之交互的时候。 上面的例子立即展示了我的框架视图,这不是必需的。:( –
是的,我预期这种答案在回答时会改为:“但是我的框架需要做一些与视图控制器无关的东西”答案是 - 你的框架可以包含许多类(甚至是相关的)客户使用将现在编辑我的答案详细 – danh
好吧,我应用上面提到的任何东西,并尝试实现一个基本的和简单的应用程序,但事实证明,我得到的_framework找不到error_但是当我导入框架到这个简单的程序,它正确导入(自动完成工作以及)..但是当我运行代码,它失败说没有找到框架。 –