2014-07-15 32 views
1

根據我的項目設計,導航堆棧結構如下圖所示: 開機畫面 - >首頁 - >事件清單 - >活動詳情推送成功!但是,View不會改變! - 爲什麼?

現在,我使用自定義網址該URL呼叫「主頁」。 所以,我想改變導航堆棧結構如下圖所示: 開機畫面 - >首頁

通過我的知識,我的代碼面臨一些內存的問題:

  • 我的代碼,只能達到堆棧如:Splash - > Home - > Home - > Home - > ...。等等,每當我使用自定義網址。

  • 否則,使用popToviewController我能達到堆棧,如: 飛濺 - >首頁 - >首頁

但是,推送成功發生,但認爲不會改變。下面

代碼:

navigationArray = [[NSMutableArray alloc] initWithArray: self.nav.viewControllers]; 
for(int k=[navigationArray count]-1;k>=0;k--){ 
    if ([[navigationArray objectAtIndex:k] isKindOfClass:[Home class]]){ 
     //UIViewController *controller=[navigationArray objectAtIndex:k]; 
     id obj=[navigationArray objectAtIndex:k]; 
     [[self nav] popToViewController:obj animated:YES]; 
    } 
} 

if(IS_IPAD) 
    class=[[Home alloc] initWithNibName:@"Home_iPad" bundle:Nil]; 
else 
    class=[[Home alloc] initWithNibName:@"Home" bundle:[NSBundle mainBundle]]; 

[self.nav pushViewController:class animated:YES];  
NSLog(@"Finally, In Nav: %@", [self.nav viewControllers]); 

此打印象下面這樣:

"Splash: 0xcea0c70", 
"Home: 0xd193400", 
"Home: 0xd470600". 

也就是說,飛濺 - >首頁 - >首頁。 但是,Simulator顯示Home:0xd193400而非Home:0xd470600。爲什麼?

+0

你的問題不明確。我認爲如果你可以重新解釋你的問題會更好。 –

+0

在你推動的地方添加你的代碼編輯列表視圖控制器 –

+0

請查看我發佈的代碼,然後回答我的問題,無論你知道什麼。 – user3483975

回答

1

這些都是下線程的概念。由於信號量概念下的一些線程塊,彈出已完成,但即使分配它也沒有發生。所以,@Dharmbir的答案對於避免OP所要求的導航問題是完全有用的。在遵循@Dharmbir的想法之後,OP將面臨許多其他問題。

例如,

  • 理由: '不能添加自己的子視圖'

  • 不平衡通話開始/結束的外觀轉變 「主頁:0xe671800」

爲了避免上述錯誤,我們必須遵循以下由其他Stack Overflow用戶提供的建議。

Can't add self as subview

iOS app error - Can't add self as subview

"Unbalanced calls to begin/end appearance transitions for DetailViewController" when pushing more than one detail view controller

1

同樣的問題這裏面臨...但我不這是爲什麼happing ..所以我做了這個技巧,你也可以,如果你申請

navigationArray = [[NSMutableArray alloc] initWithArray: self.nav.viewControllers]; 
for(int k=[navigationArray count]-1;k>=0;k--){ 
    if ([[navigationArray objectAtIndex:k] isKindOfClass:[Home class]]){ 
     //UIViewController *controller=[navigationArray objectAtIndex:k]; 
     id obj=[navigationArray objectAtIndex:k]; 
     [[self nav] popToViewController:obj animated:YES]; 
    } 
} 

[self performSelector:@selector(pushViewController) withObject:nil afterDelay:.60]; 

- (void)pushViewController 
{ 
    if(IS_IPAD) 
    class=[[Home alloc] initWithNibName:@"Home_iPad" bundle:Nil]; 
    else 
    class=[[Home alloc] initWithNibName:@"Home" bundle:[NSBundle mainBundle]]; 

    [self.nav pushViewController:class animated:YES];  
    NSLog(@"Finally, In Nav: %@", [self.nav viewControllers]); 
} 

2.解決方案

運行在後臺線程這種方法

然後用這一個

[self performSelectorOnMainThread:@selector(pushViewController) withObject:nil waitUntilDone:NO]; 
相關問題