我坐了将近4天,我找不到问题(已经搜索了很多谷歌并尝试了一切,但没有任何帮助)。我有我在故事板上创建的表格视图。一切都是连接但是当我运行我的代码时:
首先所有的tableView方法都运行但是因为数组仍然没有发生任何事情。然后在我的数组得到所有数据和代码后说[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
答案 0 :(得分: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]);
}
}];
答案 1 :(得分:0)
您无需到处拨打[tableView reloadData]
。调用此方法后,将按照numberOfRowsInSection
的顺序调用tableview的委托,并根据行数调用cellForRowAtIndexPath
。所以在你的情况下,你已将reloadData
放在cellForRowAtIndexPath
中,我想它会创建一个infinte循环。
另外,由于你在后台线程中填充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];
}
希望这有帮助。
答案 2 :(得分:0)
尝试将您的代码从viewdidload移动到viewdidlayout,viewwillappear或viewdidapear,此时您的表可能尚未初始化。