-1

我坐了将近 4 天,但我找不到问题(已经搜索了很多谷歌并尝试了所有方法,但没有任何帮助)。我在故事板上创建了这个表格视图。当我运行我的代码时,一切都已连接:

首先所有的 tableView 方法运行,但由于数组仍然 nil 没有发生任何事情。然后在我的数组得到所有数据并且代码说 [tableView1 reloadData]; 什么也没发生,我没有使用 tableView 方法......(我试图在我的代码中的许多地方找到 reloadData 并且没有任何效果)。

-(void)viewDidLoad {
    [super viewDidLoad];
    self.tableView1.dataSource=self;
    self.tableView1.delegate=self;
    self.tripNamesList = [[NSMutableArray alloc] init];

    [self GetTripsList];
    PFQuery *query = [PFQuery queryWithClassName:@"Trips"];
    NSString *userID = user.objectId;
    [query whereKey:@"User_Created_ID" equalTo:userID];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            NSLog(@"Successfully retrieved %d trips.", objects.count);
            [self.tripNamesList addObjectsFromArray:objects];
            NSLog(@"%@", tripNamesList);
            for (PFObject *object in objects) {
                NSLog(@"%@", object.objectId);
                [self.tripNamesList addObject:object ];
            }   
            [tableView1 reloadData];
        }
        else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.tripNamesList count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Calling 1222rrgdfghgfhdgfdfgfdgdfgd on %@", tableView);

    static NSString *CellIdentifier = @"TripCell";

    UITableViewCell *cell = [self.tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
    }

    PFObject *obj2 = [self.tripNamesList objectAtIndex:indexPath.row];
    PFQuery *query = [PFQuery queryWithClassName:@"Trips"];
    PFObject *searchedItems = [query getObjectWithId:obj2.objectId];
    NSString *tempTripName = [searchedItems objectForKey:@"Trip_Name"];

    cell.textLabel.text = tempTripName;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    [self.tableView1 reloadData];

    return cell;
}

@end
4

3 回答 3

0

尝试从主线程运行 reloadData:

 [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
            if (!error) {
                NSLog(@"Successfully retrieved %d trips.", objects.count);
                [self.tripNamesList addObjectsFromArray:objects];
                NSLog(@"%@", tripNamesList);
                for (PFObject *object in objects) {
                    NSLog(@"%@", object.objectId);
                    [self.tripNamesList addObject:object ];
                }   

                 dispatch_sync(dispatch_get_main_queue(), ^{
                        [self.tableView1 reloadData];     
                  });                
            }
            else {
                // Log details of the failure
                NSLog(@"Error: %@ %@", error, [error userInfo]);
            }
        }];
于 2013-09-09T02:25:00.553 回答
0

你不需要[tableView reloadData]到处打电话。一旦调用了这个方法,tableview 的委托就会被调用,就像numberOfRowsInSection根据行数一样,cellForRowAtIndexPath会调用很多时间。所以在你的情况下,你已经投入reloadDatacellForRowAtIndexPath,我猜它会创建一个无限循环。

此外,由于您在后台线程中填充 self.tripNamesList,您可以在主线程中调用 reloadData ,如下所示

for (PFObject *object in objects) {
            NSLog(@"%@", object.objectId);
            [self.tripNamesList addObject:object ];
        }  
[self performSelectorOnMainThread:@selector(refreshTableData) withObject:nil waitUntilDone:NO];

是的,为此,您需要在 .m 中有这样的方法

- (void) refreshTableData{
    [tableView reloadData];
}

希望这可以帮助。

于 2013-09-09T02:28:30.940 回答
0

尝试将您的代码从 viewdidload 移动到 viewdidlayout、viewwillappear 或 viewdidapear,此时您的表可能尚未初始化。

于 2013-09-09T06:38:42.917 回答