2013-06-02 4 views
1

В моей TableViewController я установил данные, которые я хочу, чтобы загрузить в моих DetailView (WS)UIDetailView не загружает данные, когда didSelectRowAtIndexPath называется

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath sender:(id)sender{ 

    detailViewController *detailVC = [[detailViewController alloc] init]; 
    detailVC.ws = [self.tabAssociation objectAtIndex:indexPath.row]; 
    [detailVC viewDidLoad] ; 


    //detailVC.descriptionTextView = [[UITextView alloc] init]; 

    //[self.navigationController pushViewController:detailVC animated:YES]; 
} 

И это то, что мой DetailView должен загрузить

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    self.barre.title = self.ws.associationName ; 
    self.descriptionTextView.text = self.ws.associationDescription ; 
} 

Но когда я выбираю строку, появляется белая страница, а не моя ассоциацияDescription в текстовом представлении, ни моя ассоциацияName Но мой viewDidLoad, кажется, вызывается до того, как будет загружена detailVC.ws, то есть моя detailVC пуста

Вот мой TableViewController.h

import UIKit/UIKit.h 

@interface MasterViewController : UITableViewController{ 
    NSArray *tabAssociation; 
} 

@property (nonatomic, retain) NSArray *tabAssociation; 


@end 

И TableViewController.m

#import "MasterViewController.h" 

#import "DetailViewController.h" 

@interface MasterViewController() { 

} 
@end 

@implementation MasterViewController 


@synthesize tabAssociation ; 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    NSArray *dictFromFile = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"AssociationTest" ofType:@"plist"]];  

    NSMutableArray *associationToAdd = [[NSMutableArray alloc] init]; 
    NSEnumerator *enumerator = [dictFromFile objectEnumerator]; 
    NSDictionary *anObject; 
    while ((anObject = [enumerator nextObject])) { 
    association *newAssocition = [[association alloc] initWithDictionaryFromPlist: anObject]; 
     [associationToAdd addObject: newAssocition]; 

    } 

    self.tabAssociation = [NSArray arrayWithArray:associationToAdd]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.tabAssociation.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    // On récupère l'objet Website qui correspon à la ligne que l'on souhaite afficher 
    association *ws = [self.tabAssociation objectAtIndex:indexPath.row]; 

    cell.textLabel.text = ws.associationName; 

    // On renvoie la cellule configurée pour l'affichage 
    return cell; 
} 


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath sender:(id)sender{ 

detailViewController *detailVC = [[detailViewController alloc] init]; 
detailVC.ws = [self.tabAssociation objectAtIndex:indexPath.row]; 
//[detailVC viewDidLoad] ; 
[self presentViewController:detailVC animated:YES completion:nil]; 


//detailVC.descriptionTextView = [[UITextView alloc] init]; 

//[self.navigationController pushViewController:detailVC animated:YES]; 
} 

/*- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    NSDate *object = _objects[indexPath.row]; 
    [[segue destinationViewController] setDetailItem:object]; 
    } 
}*/ 

@end 
+0

Я не думаю, что вы должны позвонить viewDidLoad вручную. Попробуйте установить точку останова, чтобы увидеть, действительно ли viewDidLoad вызывается до того, как вы установите свойство ws. –

+0

Спасибо @verbumdei, когда я установил точку останова в конце моего viewDidLoad, мой self.ws пуст (0x000000). Это означает, что мой 'detailVC.ws = [self.tabAssociation objectAtIndex: indexPath.row]' не вызывается перед viewDidLoad? –

+0

Если вы положили две точки останова, одну в viewDidLoad и одну сразу после назначения detailVC.ws, какой из них вызывается первым? Если viewDidLoad вызывается первым, может быть что-то в вашем методе init для detailViewController, который запускает его? –

ответ

1

Вы никогда не должны вызывать -viewDidLoad непосредственно. То, что вы хотите сделать, представляет вам detailViewController как-то.

Если вы находитесь внутри UINavigationController, что-то вроде:

[self.navigationController pushViewController:detailVC animated:YES]; 

должен работать. Если вы этого не сделаете, вам нужно подумать о том, как вы собираетесь представить свой контроллер представлений.

Вы можете попробовать что-то вроде:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath sender:(id)sender{ 

    detailViewController *detailVC = [[detailViewController alloc] init]; 
    detailVC.ws = [self.tabAssociation objectAtIndex:indexPath.row]; 
    [self presentViewController: detailVC animated:YES completion:nil]; 

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