2014-03-26 92 views
1

您好我正在使用返回JSON文檔的Web服務。在那個文檔中有幾個對象,每個對象都包含一個「STATE」值(其他像「ADDRESS」,「DISTANCE」等等)。這個「STATE」值可以是「ARCHIVED」或「ACTIVE」。我想要做的是將帶有「STATE」的「ARCHIVED」值的對象加載到archivedProcessTV中,其他加載到activeProcessTV中。如何將數據從特定的NSMutableArray重新加載到UITableView

我設法用所需數據填充兩個可變數組,但當TableViews重新加載時,它們將所有對象重新加載到單元中。

這是我做的connectionDidFinishLoading什麼:

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

NSLog(@"Entrou no connectionDidFinishLoading"); 

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

process = [[NSJSONSerialization JSONObjectWithData:data options:0 error:nil] objectForKey:@"GetGesturbeDataJsonResult"]; 

NSInteger i = 0; 

archived = [[NSMutableArray alloc] init]; 
active = [[NSMutableArray alloc] init]; 

for (NSObject *array1 in process) { 
    while (i <= process.count) { 
    if([[[process objectAtIndex:i] objectForKey:@"STATE" ] isEqualToString:@"ARCHIVED"]) 
     { 
      [archived addObject:[process objectAtIndex:i]]; 
      i++; 
     }else 
      [active addObject:[process objectAtIndex:i]]; 
      i++; 
    } 
} 

[activeProcessTV reloadData]; 
[archivedProcessTV reloadData]; 
} 

感謝您的幫助!

編輯:

-(UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:@"a cell"]; 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"a cell"]; 

cell.textLabel.text = [[process objectAtIndex:indexPath.row] objectForKey:@"DISTANCE"]; 

return cell; 
} 
+0

顯示你的表視圖數據源方法的實現 – Wain

+0

@Wain我不知道你是否意味着我剛剛添加到問題中。 (對不起,不好意思) – user3464645

+0

你是否將這兩個數組合並在一起(active和archived)並將所有的值混合在一起? – streem

回答

1

你似乎有2個問題:

  1. tableView:cellForRowAtIndexPath:不檢查其表視圖請求數據
  2. 你不使用你的特定陣列內容填入表格視圖,您使用[[process objectAtIndex:indexPath.row] objectForKey:@"DISTANCE"];其中包含所有數據

因此,在tableView:cellForRowAtIndexPath:開始處,您應該有一個if語句,該語句檢查atableView參數並確定使用哪個數組。然後,編輯更新單元格文本的行以使用該數組。

- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSArray *sourceArray; 

    if (atableView == self.activeProcessTV) { 
     sourceArray = self.active; 
    } else { 
     sourceArray = self.archived; 
    } 

    UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:@"a cell"]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"a cell"]; 
    } 

    cell.textLabel.text = [[sourceArray objectAtIndex:indexPath.row] objectForKey:@"DISTANCE"]; 

    return cell; 
} 

旁白:此代碼:

UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:@"a cell"]; 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"a cell"]; 

需要被改爲:

UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:@"a cell"]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"a cell"]; 
} 

按照目前的你總是創建一個新的電池,即使你沒有得到一個可重複使用的背...

+0

我編輯了代碼,就像你建議的一樣,它給了我這個錯誤:終止應用程序,由於未捕獲異常'NSRangeException',原因:'*** - [__ NSArrayM objectAtIndex:] :index 1 beyond bounds [0..0]' – user3464645

+0

Wain,你需要初始化源數組。否則,它將永遠是零? –

+1

@HussainShabbir sourceArray指向self.active或self.archived,並且永遠不會爲null,除非後者未被初始化。 – streem

0

儘管使用sourcearray只是通過這樣的下面,並檢查: -

-(UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:@"a cell"]; 
if (cell == nil){ 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"a cell"]; 
} 
if (atableView ==self.activeProcessTV) { 
cell.textLabel.text = [[self.activeProcessTV objectAtIndex:indexPath.row] objectForKey:@"DISTANCE"]; 
} 
else{ 
cell.textLabel.text = [[self.archived objectAtIndex:indexPath.row] objectForKey:@"DISTANCE"]; 
} 
return cell; 
} 

注:將正確的陣列的UITableView的numberOfRowsInSection方法內部計數。

+0

問題依然存在,它給出了錯誤:終止應用程序由於未捕獲的異常'NSRangeException',原因:'*** - [__ NSArrayM objectAtIndex:]:索引1超越界限[0..0]' – user3464645

+0

你檢查你的數組不是零? –

+0

是的,它甚至在這種情況下給出了一個UIAlertView – user3464645

相關問題