MainViewController 메인 클래스에있는 billtrackertablevalues라는 NSMutableArray 값에 BillTrackerViewController라는 다른 뷰 컨트롤러의 배열을 설정하려고합니다. 나는 BillTrackerViewController의 배열을 UITableView의 데이터로 사용하려고한다. 그러나 해당 배열 table_items 및 segue의 값을 설정하려고하면 테이블에 아무 것도 표시되지 않습니다. 그러나 billtrackertablevalues의 값은 올바르게 채워지고 null이 아닙니다. 여기 Segue가 TableView에 데이터를 전달하지 않음
는 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 내 코드입니다 : 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
,하지만 내 초기 배열 , billtrackertablevalues가 채워집니다.
미리 감사드립니다.
-(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 타이밍 문제 때문에이
에있을 수 있습니다. 이것은 타이밍 문제라고 생각합니다. findObjectsInBackgroundWithBlock : 메소드는 블록 코드가 실행되기 바로 전에 반환 될 수 있습니다. 또한이 줄, controller.table_items = [[NSMutableArray alloc] init];은 쓸모가 없으므로 제거해야합니다. – rdelmar
답변을 참조하십시오 : http://stackoverflow.com/a/20158584/952440 도움이 될 수 있습니다. –