皮肉なことに、facebook-ios-sdk
私のthree20アプリの1つにFacebookサポートを追加するためにを使用しているときに、同様の問題が発生しました。私のコントローラーはFacebookのURL応答を受け取ることを期待していましたが、標準のTTNavigator
URLマッピングを使用することはできませんでした。
コントローラー上のFacebookオブジェクトを呼び出して、着信URLを渡す方法を見つける必要がありました。コントローラスタックを管理する場合TTNavigator
、コントローラ自体以外の場所からコントローラに「アクセス」することはできません。
コントローラーにアプリデリゲートのプライベートパラメーターを設定し、それをで使用することになりましたTTURLMap
。
@class PhotoEditorController;
@interface PhotoBoothAppDelegate : NSObject <UIApplicationDelegate> {
PhotoEditorController* _photoEditorController;
}
@property(nonatomic, retain) PhotoEditorController* photoEditorController;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation PhotoBoothAppDelegate
@synthesize photoEditorController = _photoEditorController;
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark UIApplicationDelegate
///////////////////////////////////////////////////////////////////////////////////////////////////
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:NO];
TTNavigator* navigator = [TTNavigator navigator];
navigator.persistenceMode = TTNavigatorPersistenceModeNone;
navigator.window = [[UIWindow alloc] initWithFrame:TTScreenBounds()];
TTURLMap* map = navigator.URLMap;
_photoEditorController = [[PhotoEditorController alloc] init];
// Any URL that doesn't match will fall back on this one, and open in the web browser
[map from:@"*" toViewController:[TTWebController class]];
[map from:@"tt://photo" toViewController:_photoEditorController transition:UIViewAnimationTransitionCurlUp];
// Before opening the tab bar, we see if the controller history was persisted the last time
if (![navigator restoreViewControllers]) {
[navigator openURLAction:[TTURLAction actionWithURLPath:@"tt://intro"]];
}
return YES;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[_photoEditorController facebook] handleOpenURL:url];
}
このコードは引き続きを使用しTTNaviagtor
ますが、コントローラーへの参照が残っているため、コントローラーのパラメーターに直接アクセスできます。
全体として、私は避けることを強くお勧めしTTNavigator
ます。そのiPadのサポートはほとんど存在せず、壊れています。