2013-09-23 16 views
0

我有些應用程序專爲iOS 6的,今天我到他們那裏去升級到iOS 7IOS 7的tableView didSelectRowAtIndexPath方法顯示在第一選擇空白數據

他們是一個簡單的表格視圖列表和當一個記錄被選中在另一個屏幕上顯示該行的詳細信息。這在iOS 6中完美運行。使用iOS 7時,當我選擇一行時,它顯示空白數據頁面第一個選擇。如果我再回到列表並重新選擇它,然後顯示正確的數據.. 這首空白顯示後,它會工作的優良任何其他記錄的項目..

我正在絞盡腦,不能爲我的生活弄清楚爲什麼會發生這種情況。

任何想法?

CODE:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 




Statutes *statute = (Statutes *)[self.statutes objectAtIndex:indexPath.row]; 

if(self.detailView == nil) { 
    DetailViewController *viewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    self.detailView = viewController; 
    [viewController release]; 
} 

[self.navigationController pushViewController:self.detailView animated:YES]; 
self.detailView.title = [statute myStatute]; 
[self.detailView.statuteFullText setText:[statute myDescription]]; 
[self.detailView.statuteTitle setText:[statute myTitle]]; 
[self.detailView.favoritesID setText:[statute myPriority]]; 
[self.detailView.recordID setText:[statute myRecord]]; 



if ([@"1" isEqualToString:[statute myPriority]]) { 

    [self.detailView.favoriteControl setTitle:@"Remove from favorites"]; 
} else { 
    [self.detailView.favoriteControl setTitle:@"Add to favorites"];   
} 
} 

而且,改變按鈕標題添加到收藏夾等部分,不會對第一項選擇改變時,只顯示「項目」。

謝謝。

UPDATE:

所以我把範圍縮小到這段代碼:

if(self.detailView == nil) { 
    DetailViewController *viewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    self.detailView = viewController; 
    [viewController release]; 
} 

如果我刪除if語句然後就發生在每一個選擇。如果我註釋掉整個代碼,我不能做任何選擇。所以我想象我必須找到另一種方式來初始化我的視圖控制器。有任何想法嗎?爲什麼這在iOS 6中工作呢?

+0

另注:標題的設置每次都有效(即使在第一次選擇時)。 – Lkabo

+0

@LababoDid設置所有文本標籤後,您嘗試在導航控制器上推送'self.detailView'? – Amar

+0

如果您調試第一次嘗試執行的代碼。比較第一次嘗試和稍後嘗試的行數。每次檢查detailView的值。 – User382

回答

3

新的答案:(13年9月25日)

我被向後破解困擾,我不得不這樣做,以得到這個工作,加上當我從其他畫面調用的DetailView我遇到了一個類似的這個問題並沒有被這個黑客修復,所以我發現了另一個更容易修復..

我所要做的就是環繞命令,用於在異步標記和中提琴內設置值的問題!一切工作..

這裏是我的解決方案:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

Statutes *statute = (Statutes *)[self.statutes objectAtIndex:indexPath.row]; 

if(self.detailView == nil) { 
    DetailViewController *viewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    self.detailView = viewController; 
    [viewController release]; 
} 

[self.navigationController pushViewController:self.detailView animated:YES]; 
dispatch_async(dispatch_get_main_queue(), ^{ 

self.detailView.title = [statute myStatute]; 
[self.detailView.statuteFullText setText:[statute myDescription]]; 
[self.detailView.statuteTitle setText:[statute myTitle]]; 
[self.detailView.favoritesID setText:[statute myPriority]]; 
[self.detailView.recordID setText:[statute myRecord]]; 



if ([@"1" isEqualToString:[statute myPriority]]) { 

    [self.detailView.favoriteControl setTitle:@"Remove from favorites"]; 
} else { 
    [self.detailView.favoriteControl setTitle:@"Add to favorites"];   
} 

}); 
} 

所以現在爲u可以看到

dispatch_async(dispatch_get_main_queue(), ^{ 

是圍繞項目對視圖進行設置。我擺脫了所有在-ViewDidLoad部分的額外廢話...

完美。

OLD答:(13年9月24日)

好吧,我得到它的工作。這是一個完全向後的黑客攻擊,但我是結果驅動的,所以我不在乎。這讓我很不高興,因爲這個功能已經改變了,需要這個破解,但是無論如何..我希望這可以幫助那些我確信可能會遇到的人。

我獨自留在上面的代碼,並在

- (void)viewDidLoad 

部分添加以下代碼:

DetailViewController *viewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
self.detailView = viewController; 
[viewController release]; 
[self.navigationController pushViewController:self.detailView animated:YES]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.navigationController popToRootViewControllerAnimated:NO]; 

}); 

這樣做是實例化DetailViewController,顯示它,然後彈出它。當應用程序加載它似乎是在主屏幕,符合市場預期,並作出選擇時,它現在可以在第一時間,因爲在技術上它不是拳頭時間...

-LK

相關問題