2010-11-15 5 views
3

Ok, donc je suis un noob relatif avec la programmation Objective-C/iOS, donc j'espère que quelqu'un avec plus de connaissances ici peut m'aider.
J'ai une application iPad utilisant le modèle SplitViewController (avec Core Data). J'ai créé un autre UIViewController (avec le fichier xib) appelé PlayerViewController. Cette vue a plusieurs composants UILabel dessus.changer UILabel texte sur une sous-vue de la vue principale

J'ai une liste des joueurs qui apparaissent dans le RootViewController (UITableView) et lorsque vous sélectionnez un joueur, je crée par programme un PlayerViewController (en DetailViewController), passer le NSManagedObject qui a été transmis au DetailViewController, essayez de définir le texte de l'une des étiquettes dans la vue de PlayerViewController, puis ajoutez-le en tant que sous-vue à DetailViewController. Tout cela fonctionne très bien, sauf pour le réglage du texte de l'étiquette dans la vue de PlayerViewController. Je ne suis pas sûr de ce que je fais mal. J'ai utilisé NSLog pour confirmer que le NSManagedObject n'est pas nul et que la propriété NSManagedObject que j'essaie d'utiliser a le bon texte.

Je suis à perte ici. Toute aide serait grandement appréciée. (Code ci-dessous):

Cette méthode est dans le fichier DetailViewController.m:

- (void)configureView { 
    // Update the user interface for the detail item. 
    PlayerViewController *player = [[PlayerViewController alloc] init]; 
    player.player = detailItem; 
    [self.view addSubview:player.view]; 
} 

Cette méthode est appelée lorsque l'utilisateur sélectionne un élément de la RootViewController (Cette fonctionnalité, l'appel de configureView, est la configuration par le modèle et je ne l'ai pas changé).

Définition de la propriété player de PlayerViewController à l'objet detailItem est géré dans la méthode setPlayer de cette classe.

- (void)setPlayer:(NSManagedObject *)managedObject { 

    if (player != managedObject) { 
     [player release]; 
     player = [managedObject retain]; 

     // Update the view. 
     [self configureView]; 
    } 
} 

J'ai ensuite une méthode de configureView aussi bien dans PlayerViewController qui définit le texte de l'étiquette:

- (void)configureView { 
    nickName.text = [[player valueForKey:@"Nickname"] description]; 
    NSLog(@"Nickname %@", [[player valueForKey:@"Nickname"] description]); 
    NSLog(@"Nickname %@", nickName.text); 
} 

Ok, donc la première NSLog imprime déclaration la valeur souhaitée, mais le texte de la UILabel (appelé nickName) renvoie zéro.

Voici la pleine PlayerViewController.h & fichiers .m:

PlayerViewController.h:

#import <UIKit/UIKit.h> 
#import <CoreData/CoreData.h> 


@interface PlayerViewController : UIViewController { 

    NSManagedObject *player; 

    IBOutlet UILabel *nickName; 
    IBOutlet UILabel *goalCount; 
    IBOutlet UILabel *assistCount; 
    IBOutlet UILabel *timeInGame; 
} 

@property (nonatomic, retain) IBOutlet UILabel *nickName; 
@property (nonatomic, retain) IBOutlet UILabel *goalCount; 
@property (nonatomic, retain) IBOutlet UILabel *assistCount; 
@property (nonatomic, retain) IBOutlet UILabel *timeInGame; 

@property (nonatomic, retain) NSManagedObject *player; 

@end 

PlayerViewController.m:

#import "PlayerViewController.h" 


@implementation PlayerViewController 

@synthesize nickName, goalCount, assistCount, timeInGame, player; 

#pragma mark - 
#pragma mark Managing the detail item 

/* 
When setting the player item, update the view 
*/ 
- (void)setPlayer:(NSManagedObject *)managedObject { 

    if (player != managedObject) { 
     [player release]; 
     player = [managedObject retain]; 

     // Update the view. 
     [self configureView]; 
    } 
}  

- (void)configureView { 
    nickName.text = [[player valueForKey:@"Nickname"] description]; 
    NSLog(@"Nickname %@", [[player valueForKey:@"Nickname"] description]); 
    NSLog(@"Nickname %@", nickName.text); 
} 

/* 
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
     // Custom initialization 
    } 
    return self; 
} 
*/ 

/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 
*/ 



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Overriden to allow any orientation. 
    return YES; 
} 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 


- (void)viewDidUnload { 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


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


@end 

Je suis sûr que je suis Il manque juste quelque chose de trivial, mais je n'arrive pas à le comprendre et je n'ai pas trouvé de réponses à la recherche sur le web.

Merci pour toute aide!

Répondre

4

Ok, donc après avoir joué avec cela pour un peu et la recherche et la recherche autour, j'ai obtenu la réponse à mon problème. Il s'avère que tout le code que j'avais était bon sauf l'emplacement d'une déclaration. Mon appel à configureView dans PlayerViewController.m devait être dans viewDidLoad() pas dans la méthode setPlayer(). Tout fonctionne très bien maintenant.

+0

J'ai eu le même problème - merci beaucoup. –

0

Modifier la méthode configureView que:

- (void)configureView { 
    nickName.text = (NSString*)[player valueForKey:@"Nickname"]; 
} 
+0

Merci d'avoir essayé d'aider, malheureusement cela n'a pas fonctionné. – Shaggy13spe

0

Oui, meilleur appeler la méthode est

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self configureView]; 
} 
  • (void) setPlayer: (NSManagedObject *) ManagedObject appelé avant que vos fichiers nib chargés.
Questions connexes