gpt4 book ai didi

iphone - 如何从自定义对象访问 mainViewController 方法?

转载 作者:行者123 更新时间:2023-12-03 19:44:32 25 4
gpt4 key购买 nike

我已经尝试了其他帖子中的各种建议,但似乎仍然无法正常工作。

这是我的工作流程。

AppDelegate.m
#import CustomObject.h // cocoaAsyncSocket wrapper with delegates

- create customObject[[alloc] init];


mainViewController.m
- (IBAction)connectDisconnect
{
// Access our custom object inside the TPAppDelegate class object.
TPAppDelegate *appDelegate = (TPAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.customObject connectToIP:host port:port timeout:10.0];


customObject.m
#import mainViewController.h

// custom object delegate
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
// Access methods and properties inside 'mainViewController' class object.
mainViewController *mainView = (mainViewController *)[UIApplication sharedApplication];

// call method
[mainView textViewLog:@"Hello"];
.
.
}



*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIApplication textViewLog:]: unrecognized selector sent to instance 0x188750'

目标是让我的 customObject 调用 mainViewController 中的方法。

我错过了什么?还是我的做法完全错误?

最佳答案

当您在这一行中询问[UIApplication sharedApplication]

mainViewController *mainView = (mainViewController *)[UIApplication sharedApplication];

您获得了 UIApplication 实例。当然,它不是 mainViewController

我在这里看到一些解决方案:

  1. 将 mainViewController 的指针传递给 customObject 中的方法
  2. 实现委托(delegate)模式:定义 CustomObjectDelegate 协议(protocol),向 CustomObject 添加委托(delegate)属性,将 mainViewController 设置为委托(delegate),像使用委托(delegate)一样使用 CustomObject 中的 mainViewController。
  3. 如果委托(delegate)已在 CustomObject 中用于其他用途,那么您可以创建委托(delegate)的模拟(例如 UITableView 具有委托(delegate)和数据源)
  4. 在应用程序委托(delegate)类中创建一些属性(即 mainViewController)并将 mainViewController 设置为它。比从任何地方你都可以要求应用程序委托(delegate)作为 [[UIApplication sharedApplication] delegate] 并获取你的 mainViewController 就像 [[[UIApplication sharedApplication] delegate] mainViewController].

关于iphone - 如何从自定义对象访问 mainViewController 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com