1个代表到3个视图控制器

时间:2014-04-08 01:02:14

标签: ios objective-c delegates

我有一个cameraViewController,它本质上是一个条形码扫描仪。我还有3个视图控制器(A,B和C),每个控制器都有一个通向这个cameraViewController的按钮。

当cameraViewController扫描条形码时,它会执行以下操作:

if (self.detectionString != nil)
    {
        [self.delegate cameraViewController:self withCardNumber:self.detectionString];
        [self.navigationController popViewControllerAnimated:YES ];

        break;
    }

它有一个委托,并将检测到的字符串发送回上一个/父视图控制器。 所有三个viewControllers都有以下实例:

#pragma mark - CameraViewControllerDelegate

- (void)cameraViewController:(CameraViewController *)cameraViewController withCardNumber:(NSString *)number
{
self.CardNumbertext.text = number ;
}

因此两种方法都适用于cameraViewController和viewControllerA。但是,当parentViewController为B或C时,cameraViewController仍然会弹回右侧控制器,但委托函数不会运行。我做错了什么?

3 个答案:

答案 0 :(得分:1)

只有一个cameraViewController实例和三个不同的视图控制器,通过将cameraVC的委托设置为自己来“战胜它”,这是不可思议的。我认为如果A,B,C视图控制器中的每一个都通过实例化CameraViewController的新实例并将该实例的委托设置为self来响应按钮按下,则可以更好地利用系统资源和更好的架构。这应该可以解决您的问题并改善内存管理/泄漏问题。

答案 1 :(得分:0)

如果你想保留当前的实现,那么在你呈现ViewController A,B和C时更新委托。从你在问题中描述的方式看来你需要在-(void)viewWillAppear或{{1}中执行此操作}}。或者使用通知管理器作为OP建议,否则使用块。

答案 2 :(得分:0)