На самом деле есть лучший способ разобрать NSURL. Используйте NSURLComponents. Вот пример simle:
Swift:
extension URL {
var params: [String: String]? {
if let urlComponents = URLComponents(url: self, resolvingAgainstBaseURL: true) {
if let queryItems = urlComponents.queryItems {
var params = [String: String]()
queryItems.forEach{
params[$0.name] = $0.value
}
return params
}
}
return nil
}
}
Objective-C:
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
NSArray *queryItems = [components queryItems];
NSMutableDictionary *dict = [NSMutableDictionary new];
for (NSURLQueryItem *item in queryItems)
{
[dict setObject:[item value] forKey:[item name]];
}
Основная идея заключается в том, чтобы настроить трассировку стека в соответствии с вашими вариантами использования (настраиваемая обработка ошибок с некоторой дополнительной информацией, необходимой, например, в трассировке стека), поскольку:
setStackTrace (StackTraceElement [] stackTrace) метод класса Throwable используется для установки элементов трассировки стека для этого бросаемого объекта, и эта трассировка стека будет возвращена getStackTrace () и напечатана printStackTrace () и связанных с ним методов. Этот метод позволяет пользователю переопределить трассировку стека по умолчанию, которая генерируется с помощью fillInStackTrace () , когда throwable создается, или десериализуется, когда throwable читается из потока сериализации.