簡體   English   中英

Segue不會將數據傳遞到TableView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM