我在我的应用程序中显示链接到文章的网页,但并非所有网页都提供 SSL 连接。所以我需要实现一个 SFSafariViewController 来显示网站。
在我的 iPad 界面上,我手动将视图添加到 mainController,但如果我尝试添加 SFSafariViewController 的视图,我什么也得不到。
所以我尝试使用:
[[[self parent] navigationController] presentViewController:webView animated:YES completion:nil];
然而,虽然这工作得很好,但由于某种原因,我的数据源之后返回“nil”对象。即使我在调用 presentViewController 的视图中保留到对象的强链接。
我的解决方法是关闭我打开的所有视图,在关闭 SFSafariViewController 时重新加载我的数据集,但这对用户体验不利,因为用户必须一路导航回到原来的位置。
我完全不知道为什么我的 NSFetchedResultsControllers 在 SFSafariViewController 启动后都返回“nil”。任何提示将不胜感激。
[编辑:] 这是我的主视图控制器的声明。iPad 控制器在启动 SFSafariViewController 时调用此控制器:
@interface DOMainViewController : UIViewController <UINavigationControllerDelegate> {
id <DOActionControllerProtocol> _actionController;
MPMoviePlayerViewController* _moviePlayerViewController;
UINavigationController* _navigationController;
}
调用 SFSafariViewController(其中 parent 是 DOMainViewController):
SFSafariViewController* webView = [[SFSafariViewController alloc] initWithURL:link];
[webView setDelegate:self];
[[[self parent] navigationController] presentViewController:webView animated:YES completion:nil];
DOiPadController 定义如下,其中重新显示的 s=views 存储在 _viewControllers 中。
@interface DOiPadActionController : NSObject <DOActionControllerProtocol, SFSafariViewControllerDelegate> {
@private
DOMainViewController* __weak _parent;
NSMutableArray* _viewControllers;
NSMutableArray* _oldViewControllers;
int _firstViewX;
int _previousTranslation;
CGPoint _translatedPoint;
bool _bouncedLeft;
bool _bouncedRight;
bool _overruleBounce;
//Need to be able to enable and disable.
UIPanGestureRecognizer *_panRecognizer;
}
当不再需要时,我会从那里释放视图控制器,并在需要时添加新的视图控制器。这允许视图被切出视图等。
在 iPhone 应用程序中,我使用导航控制器作为视图,似乎没有问题。