我尝试拨打api电话:
api.app.com/foo/search/Öhm
其中Öhm是搜索词。问题是这个url会导致错误的url异常,而普通的chars工作正常。我试过
[searchText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
然而,这会产生很多%的迹象。 api期待Öhm。解决这个问题的任何方法?我正在使用restkit。
完整错误:
错误域= NSURLErrorDomain代码= -1000“错误的URL”UserInfo = 0x16e719d0 {NSUnderlyingError = 0x16d70d10“bad URL”,NSLocalizedDescription = bad URL} 2014-04-03 18:26:55.404我的应用程序[6844:3807] E. restkit.network:RKObjectRequestOperation.m:243 GET'(null)'(0/0 对象)[request = 0.0084s mapping = 0.0000s total = 0.0769s]:错误 Domain = NSURLErrorDomain Code = -1000“bad URL”UserInfo = 0x16e719d0 {NSUnderlyingError = 0x16d70d10“bad URL”,NSLocalizedDescription = bad URL}
终点是(null)而不是Öhm。
代码:
[[ApiSearchManager sharedManager] search:^(NSArray *result){
//handle success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
//handle fail - it fails for Öhm
} query:searchTerm];
并在较低级别:
- (void) search:(void (^)(NSArray *))success failure:(void (^)(RKObjectRequestOperation *, NSError *))failure query:(NSString *)query{
[self getObjectsAtPath:[NSString stringWithFormat:@"foo/search/%@", query] parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
if (success) {
success(mappingResult.array);
}
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
if (failure) {
failure(operation, error);
}
}];
}
答案 0 :(得分:3)
%符号是转义,而 应该如何传输URL。在服务器端,URL被解释(未转义),服务器端代码将按预期看到特殊字符。例如,在其中看到带有%20的URL是很常见的。 ASCII字符20(十六进制)是一个空格,因此获取URL(适当解码)的服务器端代码在那里看到一个空格。
答案 1 :(得分:1)
日志的这一部分:
GET '(null)' (0 / 0 objects) [request=0.0084s mapping=0.0000s total=0.0769s]:
意味着您正在执行GET
,请求网址为nil
(这会很糟糕),因此获取了状态代码,因为实际上没有发送任何请求,花了一点时间,等等等等
因此,URL加载系统无法创建用于发出请求的有效URL。
我猜你唯一能做到这一点的方法是在baseURL
中没有正确配置RKObjectManager
。检查一下。 (虽然我希望早点失败 - 所以你可能会在RKObjectRequestOperation.m
,第243行调试,并备份调用堆栈)