我已尝试过其他帖子中的各种建议,但仍然无法使其正常运行。
这是我的工作流程。
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中调用一个方法。
我错过了什么? 还是我完全错了?
答案 0 :(得分:3)
当您在此行中询问[UIApplication sharedApplication]
时
mainViewController *mainView = (mainViewController *)[UIApplication sharedApplication];
你有UIApplication实例。 Ofcource它不是mainViewController
。
我在这里看到一些解决方案:
mainViewController
)并将mainViewController设置为它。您可以在任何地方向申请代表询问[[UIApplication sharedApplication] delegate]
并获取mainViewController
[[[UIApplication sharedApplication] delegate] mainViewController]
之类的内容。答案 1 :(得分:0)
您可以通过创建协议和委托方法来实现此目的
首先创建mainView
的对象,然后创建customObject的实例
创建protocol
并在customObject
班级中实施,并在创建customObject
后将代理设置为mainView
。
在mainView
中实现协议方法,然后您可以调用customObject
中的协议方法,该方法将调用mainView
中的委托方法。
从mainView
中的委托方法,您可以调用属于mainView
的任何方法
在你的代码中,
这一行存在问题:
mainViewController *mainView = (mainViewController *)[UIApplication sharedApplication];
[UIApplication sharedApplication];没有给你任何控制器。
sharedApplication
返回单例应用程序实例。
返回值 应用程序实例在UIApplicationMain函数中创建。
答案 2 :(得分:0)
我成功使用的另一种方法是来自:
的UIKitCategories方法Get to UIViewController from UIView? enter link description here