Table View不会从Parse.com重新加载数据

时间:2014-05-04 15:52:14

标签: ios objective-c uitableview parse-platform

我有点问题。 所以这就是:

我有一个带有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;
    }

2 个答案:

答案 0 :(得分:1)

从你的代码:

您实际上正在使用titlesArray将数据填充到tableView。虽然我对这个问题仍然不太确定,但我可以为您提供一份清单,请查看以下内容:

  • 检查是否解析返回数据(检索后打印解析数据计数)
  • 然后在向其添加数据之前检查您是否已初始化数组
  • 然后检查titlesArray中是否有数据(打印)
  • 检查您是否从numberOfRowInSection
  • 返回titlesArray.count

试试这些,希望它会有所帮助。

答案 1 :(得分:1)

只是为了澄清你的代码 在didSelectRowAtIndexPath初始化PlacesViewController然后运行[pvc searchWithCategory]; searchWithCategory方法是在不同的文件中实现的吗? 属性titlesArray thumbnailsArray等等......全局变量? 为什么需要初始化PlacesViewController

我猜这是一个IPAD应用,你在splitviewcontroller所以你可以看到两个控制器? PlacesViewController有自己的tableview吗?

[self.tableview reload] 

-(void)searchWithCategory中调用哪个tableView?