[英]Segue Won't Pass Data Onto TableView
我试图将另一个名为BillTrackerViewController的视图控制器中的数组设置为位于主类MainViewController中的称为billtrackertablevalues的NSMutableArray的值。 我打算将BillTrackerViewController中的数组用作那里的UITableView的数据。 但是,当我尝试设置该数组,table_items和segue的值时,该表未显示任何内容。 但是,billtrackertablevalues的值已正确填充,并且不为null。
这是我的MainViewController代码:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"toBillTracker"]) {
PFQuery *query = [PFQuery queryWithClassName:@"Resolution"];
[query whereKey:@"event" equalTo:event_name_label.text];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *object in objects) {
[billtrackertablevalues addObject:[NSString stringWithFormat:@"%@\nPro: %@\nCon: %@\nResult: %@",[object objectForKey:@"resolution_name"], [object objectForKey:@"resolution_pro_speaker"], [object objectForKey:@"resolution_con_speaker"], [object objectForKey:@"resolution_result_id"]]];
}
NSLog(@"%@", billtrackertablevalues);
} else {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
BillTrackerViewController *controller=(BillTrackerViewController *)segue.destinationViewController;
controller.table_items = [[NSMutableArray alloc] init];
controller.table_items = billtrackertablevalues;
}
}
这是我的BillTrackerViewController的代码:
#import "BillTrackerViewController.h"
#import "Parse/Parse.h"
@interface BillTrackerViewController ()
@end
@implementation BillTrackerViewController
@synthesize billView;
@synthesize refreshButton;
@synthesize table_items;
- (void)viewDidLoad
{
[super viewDidLoad];
[billView reloadData];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) { }
return self;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [table_items count];
}
- (UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
}
NSString *cellText = table_items[indexPath.row];
cell.textLabel.text = cellText;
return cell;
}
@end
再一次,BillTrackerViewController上的表不会加载值,但是我的初始数组billtrackertablevalues已填充。
预先感谢,伙计们!
我认为您需要移动实例化控制器的行,并将其属性设置为block方法内部:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"toBillTracker"]) {
PFQuery *query = [PFQuery queryWithClassName:@"Resolution"];
[query whereKey:@"event" equalTo:event_name_label.text];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *object in objects) {
[billtrackertablevalues addObject:[NSString stringWithFormat:@"%@\nPro: %@\nCon: %@\nResult: %@",[object objectForKey:@"resolution_name"], [object objectForKey:@"resolution_pro_speaker"], [object objectForKey:@"resolution_con_speaker"], [object objectForKey:@"resolution_result_id"]]];
}
NSLog(@"%@", billtrackertablevalues);
BillTrackerViewController *controller=(BillTrackerViewController *)segue.destinationViewController;
controller.table_items = billtrackertablevalues;
} else {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
}
编辑后:
仍然存在时间问题,因为segue发生在块返回之前,因此您应该在BillTrackerViewController中覆盖table_items的setter。 segue仍然会首先发生(您可能希望在视图中放置一个微调器,以便用户知道发生了什么),然后当该块结束时,将调用setter:
-(void)setTable_items:(NSString *)table_items {
_table_items = table_items;
//update your table here.
}
这个怎么样:
controller.table_items = [[NSMutableArray alloc] initWithArray:billtrackertablevalues];
而且问题可能出在BillTrackerViewController
本身
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.