我有一个名为“GREST”的自定义NSObject类,除此方法外,一切都有效。自动完成甚至不会识别它,我真的无法弄清楚为什么。我试过改变方法的名字和一切。当我调用该方法时,它可以工作,我只是得到警告,该类可能不响应此方法。
我在头文件中声明了这个方法
- (void)connect:(NSString *)connection_url parameters:(NSString *)parameter_string header:(NSString *)header_type
这是实施
- (void)connect:(NSString *)connection_url parameters:(NSString *)parameter_string header:(NSString *)header_type {
NSData *request_data = [parameter_string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *request_length = [NSString stringWithFormat:@"%d", [request_data length]];
response_data = [[NSMutableData alloc] init];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:connection_url]];
[request setHTTPMethod:@"POST"];
[request setValue:request_length forHTTPHeaderField:@"Content-Length"];
if([header_type isEqualToString:@""] || header_type == nil || header_type == NULL) {
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
} else {
[request setValue:header_type forHTTPHeaderField:@"Content-Type"];
}
[request setHTTPBody:request_data];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setTimeoutInterval:10];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
if(!connection) {
[self apicall_failed];
}
[connection release];
}
当我尝试调用此方法时,XCode会给我以下警告
'GREST' may not respond to '-connect:parameter_string:header_type:'
编辑,以下是调用代码的方式:
GREST *api = [[GREST alloc] init];
[api setDelegate:self];
[api connect:@"http://domain.com" parameter_string:@"{'username':'hi'}" header_type:@"application/json"];
[api release];
一切正常,但我现在只想摆脱这个警告。有关如何做到这一点的任何想法?提前谢谢!
答案 0 :(得分:1)
比较方法名称:
'-connect:parameter_string:header_type:'
到
'-connect:parameters:header:'
不同之处在于您使用的是方法参数的名称,而不是实际的方法/选择器。这将在调用时导致运行时异常。
编译器将告诉您尝试使用前者的行,xcode可能会突出显示该行。
答案 1 :(得分:0)
更改
[api connect:@"http://domain.com" parameter_string:@"{'username':'hi'}" header_type:@"application/json"];
到
[api connect:@"http://domain.com" parameters:@"{'username':'hi'}" header:@"application/json"];