Segue 不会传递数据
Posted
技术标签:
【中文标题】Segue 不会传递数据【英文标题】:Segue Won't Pass Data 【发布时间】:2013-11-23 04:20:17 【问题描述】:我试图在另一个名为 BillTrackerViewController 的视图控制器中将一个数组设置为位于主类 MainViewController 中的名为 billtrackertablevalues 的 NSMutableArray 的值。我打算将 BillTrackerViewController 中的数组用作那里的 UITableView 的数据。但是,当我尝试设置该数组、table_items 和 segue 的值时,该表不显示任何内容。但是,billtrackertablevalues 的值是正确填充的,并且不为空。
这是我的 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);
BillTrackerViewController *controller=(BillTrackerViewController *)segue.destinationViewController;
controller.table_items = [[NSMutableArray alloc] init];
controller.table_items = billtrackertablevalues;
else
NSLog(@"Error: %@ %@", error, [error userInfo]);
];
这是我的 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 已被填充。
提前谢谢各位!
【问题讨论】:
你不应该两次发布同样的问题。我已经在你的第一篇文章中回答了这个问题。 【参考方案1】:更改以下代码:-
controller.table_items = [[NSMutableArray alloc] init];
controller.table_items = billtrackertablevalues;
如下:-
controller.table_items = [[NSMutableArray alloc] initWithArray:billtrackertablevalues];
之后在 viewDidLoad 方法中的 BillTrackerViewController 处执行 NSLog
并让我知道。希望它会起作用。
【讨论】:
在 viewDidLoad 方法中将 NSLog 放入 BillTrackerViewController 后,它返回“(null)”,即使 MainViewController 中的 billtrackertablevalues 数组已填充。但是,来自 BillTrackerViewController 的日志出现在 billtrackertablevalues 数组的日志之前,这可能表明这两个方法的执行存在时间问题。 @user2520999 嗯,这会导致计时问题,因为您在此处以块方法设置数组。您必须先执行 PFQuery 块方法,然后您必须执行Segue 方法。以上是关于Segue 不会传递数据的主要内容,如果未能解决你的问题,请参考以下文章