我有一个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仍然会弹回右侧控制器,但委托函数不会运行。我做错了什么?
答案 0 :(得分:1)
只有一个cameraViewController实例和三个不同的视图控制器,通过将cameraVC的委托设置为自己来“战胜它”,这是不可思议的。我认为如果A,B,C视图控制器中的每一个都通过实例化CameraViewController的新实例并将该实例的委托设置为self来响应按钮按下,则可以更好地利用系统资源和更好的架构。这应该可以解决您的问题并改善内存管理/泄漏问题。
答案 1 :(得分:0)
如果你想保留当前的实现,那么在你呈现ViewController A,B和C时更新委托。从你在问题中描述的方式看来你需要在-(void)viewWillAppear
或{{1}中执行此操作}}。或者使用通知管理器作为OP建议,否则使用块。
答案 2 :(得分:0)
向NSNotificationCenter
发布通知,这是解决此问题的更好方法:)