2014-05-04 26 views
0

我有一點問題。 所以它在這裏:表視圖不會從Parse.com重新載入數據

我有UITableView(委託和數據源集)的UIViewController。在我的viewDidLoad我查詢從Parse.com的所有數據,並將其存儲在多個NSMutableArrays(添加對象之前我初始化)

viewDidLoad

PFQuery *query = [PFQuery queryWithClassName:@"PlacesClass"]; 
     [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      if (!error) { 
       for (PFObject *object in objects) { 
        [titlesArray addObject:object[@"PlaceName"]]; 
        [thumbnailsArray addObject:object[@"PlaceImageURL"]];  
       } 
       finishedLoading = YES; 
       [self.tableView reloadData]; 
      } else 
       NSLog(@"Error: %@ %@", error, [error userInfo]); 
     }]; 

它的工作很大。它在TableView中正確顯示數據。 但是,我有一個帶有一些類別的TableView滑動菜單。當您在其中一個類別挖掘我再做一個查詢來獲取所有對象與特定的類別,如:

-(void)searchWithCategory{ 

AppDelegate * delegate = DELEGATE; 
_categoryToSearch = delegate.categoryToSearch; 

PFQuery *query = [PFQuery queryWithClassName:@"PlacesClass"]; 
[query whereKey:@"Category" equalTo:_categoryToSearch]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { 

     NSMutableArray *titlesArray2 = [[NSMutableArray alloc]init]; 
     NSMutableArray *thumbnailsArray2 = [[NSMutableArray alloc]init]; 
     NSMutableArray *facebookArray2 = [[NSMutableArray alloc]init]; 
     NSMutableArray *twitterArray2 = [[NSMutableArray alloc]init]; 
     NSMutableArray *addressArray2 = [[NSMutableArray alloc]init]; 
     NSMutableArray *descriptiomArray2 = [[NSMutableArray alloc]init]; 
     NSMutableArray *locationArray2 = [[NSMutableArray alloc]init]; 

     for (PFObject *object in objects) { 
      [titlesArray2 addObject:object[@"PlaceName"]]; 
      [thumbnailsArray2 addObject:object[@"PlaceImageURL"]]; 
      [facebookArray2 addObject:object[@"PlaceFacebookAddress"]]; 
      [twitterArray2 addObject:object[@"PlaceTwitterAddress"]]; 
      [addressArray2 addObject:object[@"PlaceAddress"]]; 
      [descriptiomArray2 addObject:object[@"PlaceDescription"]]; 
      [locationArray2 addObject:object[@"PlaceLocation"]]; 
     } 

     titlesArray = titlesArray2; 
     thumbnailsArray = thumbnailsArray2; 
     descriptiomArray = descriptiomArray2; 
     facebookArray = facebookArray2; 
     twitterArray = twitterArray2; 
     addressArray = addressArray2; 
     locationArray = locationArray2; 

     finishedLoading = YES; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.tableView reloadData]; 
     }); 

    } else 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
}]; 
} 

我打電話從滑動視圖控制器的類此方法中,選擇一個類別時。我NSLogged陣列和新的數據是正確的。它顯示來自特定類別的正確對象。

但是,TableView不會重新加載。我在主線程上運行了reloadData,我仍然沒有從cellForRowAtIndexPathnumbersOfRowsInSection得到信號。我正在使用自定義的UITableViewCell。我不知道它是否與此有關,但我嘗試了簡單的UITableViewCells,它仍然是同樣的問題。 TableView僅在第一次顯示數據時纔會重新加載。

這是我如何調用從滑動菜單視圖控制器searchWithCategory方法:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
     AppDelegate * delegate = DELEGATE; 
     delegate.categoryToSearch = [_categoriesNames objectAtIndex:indexPath.row]; 

     PlacesViewController *pvc = [[PlacesViewController alloc]init]; 
    [pvc searchWithCategory]; 

} 

你們是否有關於如何解決這個有什麼建議?我被這個困住了大約4天。 非常感謝您閱讀我的問題!

編輯:我cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    customCell = (PlacesTableViewCell *)[tableView dequeueReusableCellWithIdentifier: @"PlacesTableViewCell"]; 
    if (customCell == nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PlacesTableViewCell" owner:self options:nil]; 
     customCell = [nib objectAtIndex:0]; 
    } 

    if(finishedLoading == YES){ 
     customCell.placeName.text = [titlesArray objectAtIndex:indexPath.row]; 
     UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[thumbnailsArray objectAtIndex:indexPath.row]]]]; 
     customCell.thumbnail.image = image; 
    } 

    if(indexPath.row == titlesArray.count-1) 
     finishedLoading = NO; 

    return customCell; 
    } 
+0

在代碼中沒有任何地方我看到任何導致PlacesViewController視圖加載的結果。您需要在似乎尚未從xib加載的tableview上查看結果。 –

+0

@mithleshjha我的TableView從Storyboard加載。我沒有發佈整個ViewDidLoad。我設置了tableView的委託和數據源。你能解釋一下,如果還有其他什麼嗎?謝謝 – Sebyddd

+0

顯示你的cellforrowatindexpath方法.. – rptwsthi

回答

1

從代碼:

您實際使用titlesArray用於填充數據tableView。雖然我仍然不是很確定關於這個問題,但我可以爲您提供一個檢查表,檢查以下內容:

  • 檢查解析返回數據(檢索後打印解析數據計數)
  • 然後檢查你將數據添加到它之前已經初始化數組
  • 然後檢查titlesArray有它的數據(打印)
  • 檢查,如果你是從titlesArray.count返回numberOfRowInSection

試試這些,希望它會有所幫助。

+0

非常感謝你@rptwsthi,但我已經做了你所說的一切。 – Sebyddd

+0

然後我想你需要分享你的代碼,因爲沒有看到任何其他的原因.. – rptwsthi

+0

我分享了所有與TableView相關的代碼或它的數據.. – Sebyddd

1

只是爲了澄清你的代碼。
didSelectRowAtIndexPath您正在初始化PlacesViewController,然後運行[pvc searchWithCategory]; SearchWithCategory方法在不同的文件中執行?
屬性titlesArraythumbnailsArray etc ...全局變量? 爲什麼你需要初始化PlacesViewController

我猜這是一個IPAD應用程序,你在splitviewcontroller,所以你可以看到兩個控制器? PlacesViewController有它自己的tableview?

[self.tableview reload] 

那叫-(void)searchWithCategory哪個tableView你指的是?

+0

我正在初始化一個叫做「LeftPaneViewController」的類中的「PlacesViewController」這是我所說的左側面板的類。從那個類中,我調用屬於「PlacesViewController」的方法「[pvc searchWithCategory];」。謝謝@Yan! – Sebyddd

+0

我更新了一個問題的答案。 – Yan

+1

您列出的屬性不是全局屬性。我在「LeftPaneViewController」上初始化「PlacesViewController」以調用「PlacesViewController的」方法「searchWithCategory」。這不是一個iPad應用程序。是的,PlacesViewController有它自己的tableView。我所指的tableView是主屏幕上的一個(PlacesViewController) – Sebyddd