【发布时间】:2015-02-15 18:53:54
【问题描述】:
我有一个“主屏幕”,其中包含两个用于计数的标签。我有两个不同的 UIViewController,它们是 HomeViewController 的代表。 ViewControllerA 将调用该方法。
但是ViewControllerB的设置完全一样,除了命名之外,不会调用该方法。
我做错了什么?
HomeViewController.h
#import "ViewControllerA.h"
#import "ViewControllerB.h"
@interface HomeViewController : UIViewController <ViewControllerADelegate, ViewControllerBDelegate>
HomeViewController.m
- (void) updatedLabel {
NSLog(@"Updating label count");
}
- (IBAction)btnA:(id)sender {
[self performSegueWithIdentifier:@"segue_a" sender:self];
}
- (IBAction)btnB:(id)sender {
[self performSegueWithIdentifier:@"segue_b" sender:self];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"segue_a"]) {
ViewControllerA * vca = (ViewControllerA*) segue.destinationViewController;
vca.delegate = self;
}
if ([[segue identifier] isEqualToString:@"segue_b"]) {
ViewControllerB *vcb = (ViewControllerB*) segue.destinationViewController;
vcb.delegate = self;
}
}
ViewControllerA.h
@class ViewControllerA;
@protocol ViewControllerADelegate <NSObject>
- (void) updatedLabel;
@end
@interface ViewControllerA : UIViewController <UITextFieldDelegate>
@property (weak, nonatomic) id <ViewControllerADelegate> delegate;
ViewControllerA.m
- (IBAction)returnHome:(id)sender {
[self.delegate updatedLabel];
[self dismissViewControllerAnimated:YES completion:nil];
}
ViewControllerB.h
@class ViewControllerB;
@protocol ViewControllerBDelegate <NSObject>
- (void) updatedLabel;
@end
@interface ViewControllerB : UIViewController<AVCaptureMetadataOutputObjectsDelegate>
@property (weak, nonatomic)id <ViewControllerBDelegate> delegate;
ViewControllerB.m
- (IBAction)returnHome:(id)sender {
[self.delegate updatedLabel];
[self dismissViewControllerAnimated:YES completion:nil];
}
【问题讨论】:
-
您是否尝试过调试您的代码?它在哪里失败?什么有效,什么无效?是否有任何意外值?
-
我猜,在您执行第二次操作时,该视图控制器尚未创建,您正在对 nil 指针执行
setDelegate。
标签: ios objective-c uiviewcontroller delegates