2013-11-23 4 views
-1

Я пытаюсь установить массив в другом контроллере представления, названном BillTrackerViewController, значениям NSMutableArray, называемым billtrackertablevalues, расположенными в основном классе MainViewController. Я намерен использовать массив в BillTrackerViewController в качестве данных для UITableView. Однако, когда я пытаюсь установить значение этого массива, table_items и segue, таблица ничего не показывает. Однако значение billtrackertablevalues ​​правильно заполнено и НЕ равно нулю.Segue не передает данные

Вот мой код 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, заполняется.

Заранее спасибо, ребята!

+0

Вы не должны публиковать этот вопрос дважды. Я ответил на это в вашем первом посте. – rdelmar

ответ

1

Изменить следующий код: -

controller.table_items = [[NSMutableArray alloc] init]; 
controller.table_items = billtrackertablevalues; 

, как, как следующее: -

controller.table_items = [[NSMutableArray alloc] initWithArray:billtrackertablevalues]; 

После этого сделать NSLog в BillTrackerViewController в методе viewDidLoad и дайте мне знать. Надеюсь, он сработает.

+0

После установки NSLog в BillTrackerViewController в методе viewDidLoad он возвратил «(null)», даже несмотря на то, что массив billtrackertablevalues ​​в MainViewController был заселен. Однако журнал из BillTrackerViewController появился перед журналом для массива billtrackertablevalues, что может указывать на проблему синхронизации при выполнении двух методов. – LordChiu

+0

@ user2520999 Хммм, проблема с его причиной, потому что вы устанавливаете массив в методе блока здесь. Вы должны сначала выполнить метод блока PFQuery, тогда вам нужно выполнить метод Segue. –

Смежные вопросы