2

我正在尝试从 AppDelegate 类调用 someClass 中的方法。我通常创建一个实例,然后使用该实例调用该方法。像这样:

FFAppDelegate *delegate = (FFAppDelegate *) [[UIApplication sharedApplication] delegate];
[delegate someMethod];

我在我的代码中使用了很多 ^^,它运行良好。我想做的,就是把它转过来。我不想在 AppDelegate 内部调用方法,而是想从 AppDelegate 调用另一个类内部的方法。

SomeClass *test = (SomeClass *) [[UIApplication sharedApplication] delegate];
[test someMethod];

在这种情况下,由于“发送到实例的选择器无法识别”,我不断收到“由于未捕获的异常‘NSInvalidArgumentException’而终止应用程序”错误。

任何关于此事的线索将不胜感激!:)

4

3 回答 3

2

[[UIApplication sharedApplication] delegate];返回你的AppDelegate班级,而不是SomeClass

你可以这样使用:

FFAppDelegate *delegate = (FFAppDelegate *) [[UIApplication sharedApplication] delegate];
[delegate someMethodForSomeClass];

然后在您的 AppDelegate 代码中someMethodForSomeClass,如下所示:

- (void)someMethodForSomeClass
{
    SomeClass *someClass = _yourSomeClass;
    [someClass someMethod];
}
于 2013-09-03T04:06:21.017 回答
1

实例化您要从中发送请求的类的实例,并使该方法公开(在 .h 文件中)。然后将该类导入应用程序委托并调用它。

像这样...

  YourClass * yourClassInstance = [[YourClass alloc] init];
  [yourClassInstance someMethod];

在 @interface 下面的 YourClass.h 中,您可以像这样声明该方法

 -(void)someMethod;

所以任何人都可以访问它。

于 2013-09-03T04:03:45.407 回答
1

例如,如果您只想创建一次 AlertView 并在任何 UiViewController 中使用它

因此,您可以为 UIAlertView 制作方法并在需要时调用该方法

1)在您的 appDelegate.h 文件中

@property (nonatomic, strong) UIAlertView *activeAlertView;

2) 在您的 AppDelegate.m 文件中

-(void)openAlert
{
    NSString *strMsgPurchase = @"Write your message";
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Buy" message:strMsgPurchase delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Buy",@"Restore", nil];
    [alert setTag:100];
    [alert show];
    self.activeAlertView = alert;
}

3)调用你想要的uiview方法

[((AppDelegate *)[[UIApplication sharedApplication] delegate])openAlert];

注意:在 Appdelegate.h 文件中定义-(void)openAlert方法

于 2014-07-19T12:24:31.973 回答