2012-02-23 475 views
1

我有我的可用數據填充numberOfRowsInSection內的當前部分。然後我希望它調用cellForRowAtIndexPath,以便我可以使用這些數據。我在numberOfRowsInSection我覆蓋了上一節的數據。做NSLog它顯示numberOfRowsInSection運行的第一個cellForRowAtIndexPath之前的所有149個部分...爲什麼?iOS:cellForRowAtIndexPath不會在numberOfRowsInSection後立即調用

我已經刪除了調用reloadData,因爲我看到這是其他人在堆棧溢出問題,但沒有解決問題。

每吉姆我正在添加我在做什麼。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSMutableArray *tempArray = [NSMutableArray array]; 
    FMResultSet *appointmentResults = [[DataClass getDB] executeQuery:@"SELECT * FROM Appointments WHERE date = ?",[self.appointmentDates objectAtIndex:section]]; 
    int rowCount = 0; 
    while ([appointmentResults next]) { 
     [tempArray addObject:[appointmentResults resultDict]]; 
     rowCount++; 
    } 
    self.appointments = tempArray; 
    NSLog(@"Appointments: %@ - %i", [self.appointmentDates objectAtIndex:section], rowCount); 
    return rowCount; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Parse the appointments for the current section and display them 
} 
+0

@jostster爲什麼這會對您的應用程序有所幫​​助? – bneely 2012-02-23 17:17:44

+1

你所描述的聽起來很奇怪。首先,你不應該在'numberOfRowsInSection'中覆蓋任何東西。它應該只返回一個整數。可能需要更準確的細節。但我相信,一旦UITableView將這些委託方法踢掉,它就打算更新其視圖中的某些內容。但它應該只是詢問可見的部分和行。 – Jim 2012-02-23 17:20:10

+0

@Jim我修改了我的OP來顯示我在做什麼。 – Bot 2012-02-23 17:22:51

回答

9

從一般意義上說,依靠Apple以任何特定模式調用委託函數並不是一個好習慣。

尤其是UITableView,它只會在需要知道的基礎上請求數據。 UITableView更需要知道整個表中有多少部分和行,以便它可以正確處理諸如滾動位置和滾動條大小等內容,而實際的單元格內容可以被允許滑動,直到他們即將進入用戶的觀點。

您無法對numberOfRowsInSection進行調用,因爲這意味着系統不想知道某個節中有多少行。 :)

+0

+1非常好的答案。 – Till 2012-02-23 17:29:42

+1

好點...我忘了cellForIndexPath被調用,因爲單元格開始進入視圖...現在這是有道理的。 – Bot 2012-02-23 17:33:29

0

我的猜測是,UITableView的緩存數據,以便通過運行一次,並且得到的一切

0

它是UITableView類的工作..

沒有被震撼at..and你贏了」 T爲能夠改變的..

而且149個部分不應該一次裝入..加載它們當用戶滾動..

+0

那麼你的說法numberOfRowsInSection在第一個單元格添加之前運行所有部分?我以爲它在該部分的numberOfRowsInSection後面運行cellForIndexPath。 – Bot 2012-02-23 17:16:53

+0

不能這樣工作..雖然我明白你的項目會更簡單..像這樣..但表視圖這樣工作 – Shubhank 2012-02-23 17:19:42

2

其U的行爲ITableView。

它只會加載那些可見的單元格。要計算它,它會在顯示它們之前詢問每個部分的行數。

最初不會調用不可見的單元格cellForRowAtIndexPath。一旦用戶滾動,它將被調用。

0

如果您想刷新/更改您的表格,您應該更改model中的適當數據,然後調用tableView的[tableView reload....];方法之一(取決於您正在嘗試更改的內容)。

UITableViewDelegate方法(特別是那些返回的行數,段......)不應該做比他們的名字所說的更多的事情,否則最終會導致您的表格或可能應用程序崩潰......

當您撥打[tableView reload....];時,您的內容提供方法將被調用,並且這是提供內容的地方。

0

我也得到同樣的情況。我認爲原因是表格的行返回的高度爲0.

相關問題