gpt4 book ai didi

ios - 从类别调用方法在 iOS 7.1 中给出 "Unrecognised selector error",但在 8.4 中没问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:28 25 4
gpt4 key购买 nike

基本上,问题标题说明了一切。我尝试了很多东西,但都不起作用。

我有扩展 NSURLSession 的类别,用于处理服务器和网络错误

- (NSURLSessionDataTask *)
dataTaskHandlingErrorsWithRequest:(NSURLRequest *)request
completionHandler:(void (^)(NSData *))completionHandler {
return
[self dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response,
NSError *error) {
if (!error && response &&
[response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;
if (resp.statusCode / 100 == 2) {
completionHandler(data);
} else {
// Wrong status code from server.
NSNotificationCenter *center =
[NSNotificationCenter defaultCenter];
[center postNotificationName:kPANotifiNameServerStatusError
object:self
userInfo:@{
@"response" : resp
}];
NSLog(@"Wrong status code");
completionHandler(nil);
}
} else {
// Something wrong with network.
NSNotificationCenter *center =
[NSNotificationCenter defaultCenter];
[center postNotificationName:kPANotifiNameNetworkError
object:self
userInfo:@{
@"error" : error ? error : [NSNull null]
}];
NSLog(@"Internet connection problem.");
completionHandler(nil);
}
}];
}

这是我调用它的地方:

- (void)authenticateWithHandler:(AuthHandler)handler {
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionTask *task =
[session dataTaskHandlingErrorsWithRequest:self.request
completionHandler:^(NSData *data) {
if (data) {
BOOL suc = [self handleResponse:data];
handler(suc);
} else {
handler(NO);
}
}];
[task resume];
}

因此,在 iOS 7.1 上,如果我调用该方法,它会抛出

2015-08-06 15:29:50.973 MyApp[2618:607] -[__NSCFURLSession dataTaskHandlingErrorsWithRequest:completionHandler:]: unrecognized selector sent to instance 0x7871bf40
2015-08-06 15:29:50.976 MyApp[2618:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFURLSession dataTaskHandlingErrorsWithRequest:completionHandler:]: unrecognized selector sent to instance 0x7871bf40'

但在 iOS 8 上它可以工作。我检查了编译源,那里一切正常。

最佳答案

你能检查你的类别方法吗:

if ([self isKindOfClass:[NSURLSession class]]) {
NSLog(@"YES");
}

也许您尝试在其上运行它的对象只是被转换为 NSURLSession 而实际上它不是..?只是一些猜测,因为我仍然不知道。

我想在这里点Mattt answer ,这有助于了解其工作原理。

关于ios - 从类别调用方法在 iOS 7.1 中给出 "Unrecognised selector error",但在 8.4 中没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854760/

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