OK Je tire mes cheveux sur ce sujet, il n'a pas de sens si elle doit être soit un bug ou une erreur extrêmement stupide que je fais.objets dans le fichier nib ne pas associer avec des objets IBOutlet dans le code
Voici la situation: j'ai un UIViewController avec un fichier xib. Il a un UIView connecté à la propriété view, un UIImageView connecté à une propriété appelée imageView, et un UISegmentedControl connecté à segmentControl.
Pourtant, dans mon code, je suis incapable d'assigner une image à la vue de l'image. Quand je NSLog l'objet, j'obtiens l'adresse de 0x0, ainsi il ne s'associe pas du tout. J'ai les bindings mis en place dans le constructeur d'interface, j'ai redémarré XCode et nettoyé et construit le projet. Rien ne fonctionne et j'ai perdu un temps stupide à essayer de comprendre cela à ce stade. J'ai également NSLoged l'objet segmentControl et je reçois aussi 0x0. Donc rien de XIB ne se connecte avec le code, mais le XIB se charge lui-même car les objets sont affichés sur l'écran.
Est-ce que quelqu'un a des idées désinvoltes de ce que je pourrais être absent? C'est une chose tellement simple, c'est incroyablement frustrant que l'on refuse de travailler tout d'un coup.
Voici le code ci-dessous, dans ce cas, je suis d'accéder aux objets du compositeur pour projectId, mais j'ai aussi essayé d'accéder à la imageView d'une autre classe et il ne fonctionne pas non plus (et oui j'avais une @property déclaration et synthétiser pour imageView quand j'ai essayé).
DiagramViewController.h:
#import <UIKit/UIKit.h>
@interface DiagramViewController : UIViewController
{
NSUInteger projectId;
IBOutlet UIImageView *imageView;
IBOutlet UISegmentedControl *segmentControl;
}
@property NSUInteger projectId;
@end
DiagramViewController.m:
#import "DiagramViewController.h"
@implementation DiagramViewController
@synthesize projectId;
-(void)setProjectId:(NSUInteger)projId
{
NSLog(@"imageView: %@", imageView);
NSLog(@"segmentControl: %@", segmentControl);
projectId = projId;
NSString *filePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%i_schem", projectId] ofType:@"png" inDirectory:@"project-details/images/diagrams"];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
imageView.image = [UIImage imageWithData:imageData];
}
- (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
Et est ici une image des connexions ultra Builder Interface:
Publiez du code depuis votre contrôleur, où ces éléments sont inexistants et où vous les configurez. Ma première idée est que vous utilisez les propriétés de getter dans '-loadView', mais j'aimerais voir du code pour pouvoir répondre correctement à cette question. – jer
Mise à jour du projet avec le code et la capture d'écran IB, cela n'a aucun sens, c'est le contrôleur de vue le plus simple que j'ai jamais mis en place et je refuse de travailler. –