EXC_BAD_INSTRUCTION для оператора switch
Я получил отчет о сбое на Crashlytics для EXC_BAD_INSTRUCTION 0x00000000e4043f55
указывая на этот кусок кода. Что он пытается сделать, это получить NSString
с методом HTTP для использования в запросе URL.
+ (NSString *)getRequestType:(RequestType)type {
switch (type) {
case kRequestTypeGET:
return @"GET";
case kRequestTypePOST:
return @"POST";
case kRequestTypePUT:
return @"PUT";
case kRequestTypeDELETE:
return @"DELETE";
case kRequestTypeHEAD:
return @"HEAD";
default:
return nil;
}
}
Я не могу найти никаких проблем с кодом, любые предложения приветствуются.
ОБНОВЛЕНИЕ 1: Вот определение констант, используемых в операторе switch.
typedef NS_ENUM(NSUInteger, RequestType) {
kRequestTypeGET,
kRequestTypePOST,
kRequestTypePUT,
kRequestTypeDELETE,
kRequestTypeHEAD
};
ОБНОВЛЕНИЕ 2: Это упрощенная версия вызова метода +getRequestType:
+ (NSMutableURLRequest *)requestWithURL:(NSString *)url withRequestType:(RequestType)requestType withBody:(NSDictionary *)body withParameters:(NSDictionary *)parameters {
NSMutableURLRequest *httpRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[httpRequest setHTTPMethod:[self getRequestType:requestType]];
[httpRequest setTimeoutInterval:kTimeOutPeriod];
if (parameters != nil) {
for (NSString *key in [parameters allKeys]) {
[httpRequest setValue:parameters[key] forHTTPHeaderField:key];
}
}
NSError *error = nil;
NSData *requestData = body?[NSJSONSerialization dataWithJSONObject:body options:0 error:&error]:nil;
if (requestData) {
[httpRequest setHTTPBody:requestData];
[httpRequest setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
}
return httpRequest;
}