Ich habe eine ContentPageViewController-Klasse, es hat die IBOutlet Sachen. Ich schreibe meinen Getter von ContentPageViewController im ViewController wie der folgende Code.Die UILabel ist null
ContentPageViewController.h
@interface ContentPageViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *busName;
@property (weak, nonatomic) IBOutlet UILabel *busTime;
@property (weak, nonatomic) IBOutlet UILabel *busType;
@end
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// instantiation from a storyboard
ContentPageViewController *page = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentPageViewController"];
self.page = page;
// send url request
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://api.apb-shuttle.info/now" ]];
[self sendURLRequest:request];
// add the view of ContendPageViewController into ViewController
[self.view addSubview:self.page.view];
}
// It works if i remove the following code
- (ContentPageVC *)page
{
if (_page) _page = [[ContentPageViewController alloc] init];
return _page;
}
Es ist nichts passiert, wenn ich es aktualisiert. Und es hat mir ein Nichts gegeben.
- (void)updateUI
{
// I got null here
NSLog("%@", self.page.busName)
// The spacing style font
NSDictionary *titleAttributes = @{
NSKernAttributeName: @10.0f
};
NSDictionary *attributes = @{
NSKernAttributeName: @5.0f
};
self.page.busName.attributedText = [[NSMutableAttributedString alloc] initWithString:bus.name
attributes:titleAttributes];
self.page.busTime.attributedText = [[NSMutableAttributedString alloc] initWithString:bus.depart
attributes:titleAttributes];
self.page.busType.attributedText = [[NSMutableAttributedString alloc] initWithString:bus.note
attributes:attributes];
}
Der folgende Code ist, wenn ich die updateUI genannt:
- (void)sendURLRequest:(NSURLRequest *)requestObj
{
isLoading = YES;
[RequestHandler PerformRequestHandler:requestObj withCompletionHandler:^(NSDictionary *data, NSError *error) {
if (!error) {
bus = [JSONParser JSON2Bus:data];
// Add the bus object into the array.
[self.busArray addObject: bus];
[[NSOperationQueue mainQueue] addOperationWithBlock: ^{
[self updateUI];
isLoading = NO;
}];
} else {
NSLog(@"%@", [error localizedDescription]);
}
}];
}
Aber es hat funktioniert, wenn ich die Getter oben entfernt. Ich habe keine Ahnung, wie es funktioniert, bitte geben Sie mir einen Hinweis. Vielen Dank.
Alloc 'init' wird sehr wenig Initialisierung im Vergleich zu, sagen wir, initWithNibName oder Instanziierung von einem Storyboard. Die Standardimplementierung wird sicherlich keine Subviews initialisieren – danh
Haben Sie eine xib/Storyboard-Datei zusammen mit Ihrem View-Controller eingerichtet? –
Hallo @danh, ich habe meinen Artikel über Instanziierung aktualisiert, bitte sehen Sie sich das an. Kannst du irgendein Material über dich empfehlen? Danke vielmals. –