2

我正在使用一個修改後的基於視圖的應用程序,其中我已經啓動了顯示輸入控件的顯示結果的輸入控件& TTThumbsViewController的UIViewController。我使用TTNavigator initWithName:爲TTThumbsViewController在AppDelegate中傳遞它們。 我自己從文檔讀做:如何用TTNavigator推下一個視圖?

我TTThumbsViewController裏面viewDidLoad方法:

- (void)viewDidLoad { 
self.photoSource = [[PhotoSource alloc] 
        initWithType:PhotoSourceNormal 
        title:myTitle 
        photos:myImages 
        photos2:nil 
        ]; 
} 

我的AppDelegate的實施:

@implementation geoFlickrAppDelegate 
@synthesize window=_window; 
@synthesize viewController=_viewController; 
@synthesize navigator; 
- (BOOL)application:(UIApplication *)application    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
navigator =[TTNavigator navigator]; 
navigator.window = self.window; 

TTURLMap *map = navigator.URLMap; 
[map from:@"app://home/" toViewController:[geoFlickrViewController class]]; 
[map from:@"app://album/(initWithName:)" toViewController:[AlbumController class]]; 

[navigator openURLAction:[TTURLAction actionWithURLPath:@"app://home/"]]; 
// Override point for customization after application launch. 
[self.window makeKeyAndVisible]; 
return YES; 
} 

-(void)toGallery:(NSString*)txt 
{ 
[navigator openURLAction:[TTURLAction actionWithURLPath:txt]]; 
} 

我的UIViewController推內部事件下一個視圖:

-(IBAction)search:(id)sender 
{ 
    NSString *str = [[NSString alloc] initWithFormat:@"app://album/%@",txtSearch.text]; 
    geoFlickrAppDelegate *appDelegate = (geoFlickrAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate toGallery:str]; 
} 

這段代碼的結果是輸入通過我的AppDelegate在TTThumbsViewController中使用initWithName:傳遞,但從未被推入&我的ViewDidLoad方法永遠不會被調用。任何想法爲什麼是這樣?

回答

2

每當我有這樣的錯誤,這是初始化(在你的情況initWithName :)返回nil 。這是我要檢查的第一件事。如果這樣不能解決問題,請嘗試在[TTBaseNavigator presentController:parentURLPath:withPattern:action:]中設置斷點。

如果沒有達到該方法,那麼URL-Map有問題。您可能需要爲您的用戶輸入urlencode。基於URL的導航適用於URL。無法在URL中使用的字符串無法傳遞未編碼。

如果這個方法已經達到,你可以使用調試器,並通過代碼從那裏找出什麼是錯的。

我想提及的另一件事是,當你喜歡使用導航器時,你真的不需要引用你的appDelegate和[[UIApplication sharedApplication] delegate]。這是導航器如此有用的原因之一。嘗試調用更改爲:

-(IBAction)search:(id)sender 
{ 
    NSString *str = [[NSString alloc] initWithFormat:@"app://album/%@",txtSearch.text]; 
    TTOpenURLFromView(str, self.view); 
    TTOpenURL(str); // Three20 < 1.0.3 
} 

然後,您可以擺脫toGallery:方法。

+0

我刪除了'toGallery:'方法,修復了我的init&現在我的應用順利進行。謝謝tonklon。 – Kex

0

在我的代碼中,我沒有:

navigator.window = self.window;

和實例化窗口電話:

navigator =[TTNavigator navigator]; 
navigator.window; 

,改變[self.window makeKeyAndVisible]

[navigator.window makeKeyAndVisible] 
+0

如果我刪除'navigator.window = self.window;'我得到一個白色的屏幕和第二個改變並沒有改變任何東西.. – Kex

+0

'self.window'值是什麼呢?你是否在使用筆尖文件? – sergio

+0

請看看我的編輯,我添加了一些東西... – sergio

相關問題