2013-11-22 57 views
0

我想在另一個視圖控制器中設置一個名爲BillTrackerViewController的數組,以獲取名爲billtrackertablevalues的NSMutableArray的值,該值位於主類MainViewController中。我打算使用BillTrackerViewController中的數組作爲UITableView的數據。但是,當我嘗試設置該數組的值,table_items和segue時,該表不顯示任何內容。然而,billtrackertablevalue的價值是正確填充的,並且不爲空。塞格不會將數據傳遞到表查看

這裏是我的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,填充。

在此先感謝,夥計們!

+0

只是prepareForSegue你的最後一行前檢查billtrackertablevalues的價值。我認爲這是一個計時問題 - 方法findObjectsInBackgroundWithBlock:可能在塊代碼執行之前立即返回。此外,這行,controller.table_items = [[NSMutableArray alloc] init];是無用的,應該刪除。 – rdelmar

+0

在這裏看到答案:http://stackoverflow.com/a/20158584/952440可能會有所幫助。 –

回答

0

我認爲你需要移動的行實例化控制器組成,其屬性設置爲塊的方法中:

編輯
-(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。仍然會發生賽格瑞第一(你可能想要把一個微調在您的視圖,以便用戶知道有事情發生),然後當塊結束時,setter方法被調用:

-(void)setTable_items:(NSString *)table_items { 
    _table_items = table_items; 
    //update your table here. 
} 
+0

仍然不起作用 - 我需要在其他視圖控制器上做什麼? – LordChiu

+0

@ user2520999,日誌仍然顯示billtrackertablevalue的正確值嗎?你有沒有嘗試記錄控制器和controller.table_items(在prepareForSegue)?如果不是這樣,那就報告結果。 – rdelmar

+0

該日誌返回以下內容:( 「已解決,你是你吃的東西。\ nPro:Ryan Chiu \ nCon:Sunny Shah \ nResult:Passed」, 「解決了,現代科技創造了一個」Me,Me ,我「代。\ nPro:Ryan Chiu \ nCon:Ryan Chiu \ n結果:失敗」 ) – LordChiu

0

如何:

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

而且問題可能是在BillTrackerViewController本身