0

我正在尝试从“IAPHelper”调用“SettingsViewController”中的方法。

在寻找答案后,我想我已经掌握了如何做到这一点的要点。这是我所做的:

设置视图控制器.h

@interface SettingsViewController : UITableViewController

- (void)stopActivityIndicatorAnimating;

设置视图控制器.m

- (void)stopActivityIndicatorAnimating
{
// DO STUFF
}

IAPHelper.h

#import "SettingsViewController.h"

IAPHelper.m

SettingsViewController *settingsViewControllerInstance = [[SettingsViewController alloc] init];
[settingsViewControllerInstance stopActivityIndicatorAnimating];

现在,我四处寻找有同样问题的人,但对我来说,解决方案看起来都像我正在做的!

我遇到的问题是没有错误,代码应该执行(我添加了一个 NSLog)但是它应该调用的方法中的代码不会发生。它只是默默地不做。

有人可以告诉我我是否遗漏了什么,完全错误(很可能),或者它是否真的应该起作用并且我在其他地方做错了什么,在这种情况下,我会让你一个人呆着。

谢谢!

4

3 回答 3

4

在您的 IAPHelper 中,您正在创建一个新的 viewContorller。这是您向其发送 stopActivityIndi​​catorAnimating 消息的对象。由于此 viewControllers 视图可能不在可见的 viewHierarchy 中,因此您将看不到任何效果。解决这个问题的方法是有一个更好的设计,例如:让你的 IAPHelper 发送一个合适的 NSNotification。然后viewCoroller 可以观察到这个通知并对其进行操作(即打开或关闭activityMonitor)。由于您的 IAPHelper 很可能是一种数据层类型的对象,因此您不希望将其耦合到 viewController,因为这将导致非常僵化的设计,这样的问题会变得更加频繁和困难。

于 2013-11-04T08:08:12.677 回答
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 类,其中将调用方法 stopActivityIndi​​catorAnimating。

于 2013-11-04T08:22:24.827 回答
0

正如其他答案所暗示的那样,您可以有比这更好的设计。

从上面的代码我的感觉是,您已经在对象 A 中创建并启动了动画,并尝试在对象 B 中创建对象 B 并执行停止动画方法。您应该将对象的正确引用(对象 A 的引用)传递给IAPHelper 并从该对象调用停止动画。

你的 IAPHelper 应该是这样的

IAPHelper.h

#import "SettingsViewController.h"
@property (nonatomic, strong)SettingsViewController *settingsViewControllerInstance;

IAPHelper.m

[self.settingsViewControllerInstance stopActivityIndicatorAnimating];
于 2013-11-04T17:01:09.780 回答