我正在尝试从“IAPHelper”调用“SettingsViewController”中的方法。
在寻找答案后,我想我已经掌握了如何做到这一点。这就是我所做的:
SettingsViewController.h
@interface SettingsViewController : UITableViewController
- (void)stopActivityIndicatorAnimating;
SettingsViewController.m
- (void)stopActivityIndicatorAnimating
{
// DO STUFF
}
IAPHelper.h
#import "SettingsViewController.h"
IAPHelper.m
SettingsViewController *settingsViewControllerInstance = [[SettingsViewController alloc] init];
[settingsViewControllerInstance stopActivityIndicatorAnimating];
现在,我一直在寻找那些遇到同样问题的人,但对我来说,解决方案看起来都像我在做什么!
我遇到的问题是没有错误,代码应该执行(我已经添加了一个NSLog)但是它应该调用的方法中的代码不会发生。它只是默默地不这样做。
有人可以告诉我,如果我错过了一些东西,完全错了(最有可能),或者它真的应该有效,我在其他地方做错了,在这种情况下,我会让你一个人
谢谢!
答案 0 :(得分:4)
在您的IAPHelper中,您正在创建一个新的viewContorller。这是您发送stopActivityIndicatorAnimating消息的对象。由于此viewControllers视图可能不在可见的viewHierarchy中,因此您将看不到任何效果。 解决这个问题的方法有一个更好的设计,例如:让您的IAPHelper发出合适的NSNotification。然后viewCotroller可以观察此通知并对其进行操作(即打开或关闭activityMonitor)。 由于您的IAPHelper很可能是数据层类型的对象,因此您不希望将其耦合到viewController,因为这将导致非常严格的设计,这样的问题变得更加频繁和困难。
答案 1 :(得分:2)
我建议使用NSNotification。
在您的IAPHelper.m中发送通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"StopAnimating"
object:self];
在您的SettingsViewController.m viewDidLoad方法中执行:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stopActivityIndicatorAnimating)
name:@"StopAnimating"
object:nil];
使用此代码,将从IAPHelper类内部向SettingsViewController类发送通知,其中将调用stopActivityIndicatorAnimating方法。
答案 2 :(得分:0)
正如其他答案所示,您可以拥有比此更好的设计。
从上面的代码我感觉到,你已经在对象A中创建并启动了动画并尝试创建对象B并在对象B中执行停止动画方法。你应该传递对象的正确引用(对象的引用) A)到IAPHelper并从该对象调用停止动画。
你的IAPHelper应该是这样的
<强> IAPHelper.h 强>
#import "SettingsViewController.h"
@property (nonatomic, strong)SettingsViewController *settingsViewControllerInstance;
<强> IAPHelper.m 强>
[self.settingsViewControllerInstance stopActivityIndicatorAnimating];