gpt4 book ai didi

iphone - 如何在 objective-c 中将方法设置为类方法的参数

转载 作者:可可西里 更新时间:2023-11-01 04:40:14 26 4
gpt4 key购买 nike

我在编写一个有参数的类方法时遇到问题。

函数在“SystemClass.m/h”类中

//JSON CALL
+(void)callLink:(NSString*)url toFunction:(SEL)method withVars:(NSMutableArray*)arguments {
if([self checkConnection])
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *datas = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
[arguments addObject:datas];
[self performSelectorOnMainThread:@selector(method:) withObject:arguments waitUntilDone:YES];
});
}else{
[self alertThis:@"There is no connection" with:nil];
}
}

该函数所做的是调用一个JSON url,并将数据提供给一个方法

我是这样使用的:

[SystemClass callLink:@"http://www.mywebsite.com/call.php" toFunction:@selector(fetchedInfo:) withVars:nil];

但是它像这样崩溃了:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[SystemClass method:]: unrecognized selector sent to class 0x92d50'

你能帮帮我吗?无论如何,我正在尝试找到解决方案!

谢谢,亚历克斯

最佳答案

在您的 callLink 方法中,您已经提供了一个选择器作为参数(它是称为“方法”的参数)。此外,您还需要添加一个参数,因为应该从实现此方法的对象调用“方法”参数(在您给我们的示例中,应用程序将尝试从 SystemClass 调用名为“方法”的方法,当您打电话:

[self performSelectorOnMainThread:method withObject:arguments waitUntilDone:YES];

这里的 self 是 SystemClass,而 SystemClass 中似乎不存在这样的方法,这就是它崩溃的原因)。所以向参数添加一个目标(一个 id 对象):

+(void)callLink:(NSString*)url forTarget:(id) target toFunction:(SEL)method withVars:(NSMutableArray*)arguments;

因此对于下一行,您应该只提供选择器并在目标对象上调用此选择器:

[target performSelectorOnMainThread:method withObject:arguments waitUntilDone:YES];

而不是:

[self performSelectorOnMainThread:@selector(method:) withObject:arguments waitUntilDone:YES];

改进:

在调用选择器之前,你应该检查目标是否响应选择器做类似的事情(它会防止你的应用程序崩溃)。而不是这样做:

[target performSelectorOnMainThread:method withObject:arguments waitUntilDone:YES];

这样做:

if([target respondsToSelector:method])
{
[target performSelectorOnMainThread:method withObject:arguments waitUntilDone:YES];
}
else
{
//The target do not respond to method so you can inform the user, or call a NSLog()...
}

关于iphone - 如何在 objective-c 中将方法设置为类方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068122/

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