アプリ内の記事にリンクされた Web ページを表示していますが、すべてが SSL 接続を提供しているわけではありません。そのため、Web サイトを表示するために SFSafariViewController を実装する必要がありました。
私の iPad インターフェイスでは、手動でビューを mainController に追加しますが、SFSafariViewController のビューを追加しようとしても、何も得られません。
だから私は使用しようとしました:
[[[self parent] navigationController] presentViewController:webView animated:YES completion:nil];
ただし、これは非常にうまく機能しますが、何らかの理由でデータソースが後で「nil」オブジェクトを返します。presentViewController を呼び出すビュー内のオブジェクトへの強力なリンクを保持していても。
私の回避策は、開いているすべてのビューを閉じ、SFSafariViewController が閉じられたときにデータセットをリロードすることですが、ユーザーは元の場所に戻る必要があるため、これはユーザー エクスペリエンスには適していません。
SFSafariViewController の起動後に NSFetchedResultsControllers がすべて「nil」を返す理由は完全にわかりません。どんなヒントでも大歓迎です。
[編集:] これは私のメイン ビュー コントローラーの宣言です。iPad コントローラーは、SFSafariViewController を起動するときに、このコントローラーを呼び出します。
@interface DOMainViewController : UIViewController <UINavigationControllerDelegate> {
id <DOActionControllerProtocol> _actionController;
MPMoviePlayerViewController* _moviePlayerViewController;
UINavigationController* _navigationController;
}
SFSafariViewController の呼び出し (親は 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 アプリでは、ビューにナビゲーション コントローラーを使用していますが、問題はないようです。