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!
J'ai eu le même problème - merci beaucoup. –