2010-10-22 87 views
0

我使用uitableview獲取NSURLconnection數據並試圖顯示它的tabController應用程序。我無法弄清楚這個問題。如果我用一個數組替換連接,我將存儲所有的下鑽工作,但更新不會,所以我認爲tableView結束的事情是好的。但是:當源是NSURLConnection並獲取新數據時重新加載tableview

如果我把[[self.tableview] reloadData];在 - (void)connectionDidFinishLoading:

這會導致在視圖上的父行的循環。當您選擇一行時,它會使用同一行「標題」重新填充,而不是它的子項。如果我刪除[[self.tableview] reloadData]; tableDataSource3是空的,不會刷新URL數據,所以我需要它。我有NSLogs顯示更新,所以我知道它正在更新。

如果我把[[self.tableview] reloadData];在ViewDidAppear中:

視圖是空的,直到我移出表並返回(該應用程序是帶有tableView的tabcontroller)。如果我在數據庫中添加一行並通過NSURL連接進行更新,tableView會保持原樣,但是如果我選擇一行,那麼更新後的新數據會出現在推送表中。

如果我把[[self.tableview] reloadData];在ViewWillAppear中:

視圖是空的,直到我移出表並返回。但是,推入的子視圖是空的。

任何想法?

這裏是NSURLConnection的甲基

-(void) connectionDidFinishLoading:(NSURLConnection *)conn3 { 

~ JSON STUFF~ 

    NSArray *test = [json objectForKey:@"Rows"]; 
    tableDataSource3 = [[NSArray alloc] initWithArray:test]; 


    [json release]; 
    [conn3 release]; 
    self.receivedData =nil; 
    [[self tableview] reloadData]; 
    } 

這裏到底是選擇方法:

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

    //Get the dictionary of the selected data source. 
NSDictionary *dictionary = [self.tableDataSource3 objectAtIndex:indexPath.row]; 

//Get the children of the present item. 
NSArray *Children = [dictionary objectForKey:@"Children"]; 

if([Children count] == 0) { 

    ItemDetailViewController *dvController = [[ItemDetailViewController alloc] initWithNibName:@"ItemDetailView" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:dvController animated:YES]; 
    [dvController release]; 
} 
else { 

    //Prepare to tableview. 
    ThirdTab *rvController = [[ThirdTab alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 


    rvController.CurrentLevel3 += 1; 


    rvController.CurrentTitle3 = [dictionary objectForKey:@"Title"]; 
    [self.navigationController pushViewController:rvController animated:YES]; 

    rvController.tableDataSource3 = Children; 

    [rvController release]; 
} 

} 

回答

0

的硬類來跟蹤你在說什麼......和您的代碼需要格式化(上圖)

嘗試...

  • 在-viewDidLoad中啓動您的NSURLConnection請求
  • [[self tableView] reloadData];只應在connectionDidFinishLoading:或在NSURLConnection請求之外的任何數據陣列更新之後調用。
  • connectionDidFinishLoading:self.tableDataSource3 = [[NSArray alloc] initWithArray:test]; before the [[self tableView] reloadData];
+0

@喬丹是在NSURL開始在viewDidLoad中 – 2010-10-23 04:32:20

+0

@喬丹,我在connectionDidFinishLoading年底拿到了reloadData只有一次。添加自我是一個好主意,但我有同樣的結果。 thx – 2010-10-23 04:44:27

+0

我有一種感覺,整個didselectRowatIndexPath不正確的reloadData調用。我發佈了一個新問題。 – 2010-10-27 17:22:32

相關問題