gpt4 book ai didi

ios - 带空格的字符串无法转换为 NSURL - Mantle

转载 作者:行者123 更新时间:2023-11-29 10:26:15 27 4
gpt4 key购买 nike

想知道我们是否可以解决在 Mantle 中将带空格的字符串转换为 NSURL 失败的问题?

我遇到了 Mantle 错误:

Error Domain=MTLTransformerErrorHandlingErrorDomain Code=1 “无法将字符串转换为 URL” UserInfo=0x7ff9e8de4090 {MTLTransformerErrorHandlingInputValueErrorKey= https://x.com/dev-pub-image-md/x-img/02020-x yy z@2X.png, NSLocalizedDescription=无法将字符串转换为 URL,NSLocalizedFailureReason=输入 URL 字符串 https://x.com/dev-pub-image-md/x-img/02020-x yy z@2X.png 格式错误

类文件下方;

.h-

#import "Mantle.h"

@interface Place : MTLModel <MTLJSONSerializing>

@property (strong, nonatomic) NSString *placeId;
@property (strong, nonatomic) NSURL *logoURL;

@end

.m-

#import "Place.h"

@implementation Place

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{@"placeId": @"placeId",
@"logoURL":@"circleImage"
};
}

+ (NSValueTransformer *)logoURLJSONTransformer {
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}

@end

提前致谢!

最佳答案

发生这种情况是因为您的字符串未经过 URL 结尾编码(URL 不能包含空格)。

首先 - 使用以下方法对您的字符串进行 URL 编码。来源:Stackoverflow

- (NSString *)urlencodeString:(NSString*)string {
NSMutableString *output = [NSMutableString string];
const unsigned char *source = (const unsigned char *)[self UTF8String];
int sourceLen = strlen((const char *)source);
for (int i = 0; i < sourceLen; ++i) {
const unsigned char thisChar = source[i];
if (thisChar == ' '){
[output appendString:@"+"];
} else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
(thisChar >= 'a' && thisChar <= 'z') ||
(thisChar >= 'A' && thisChar <= 'Z') ||
(thisChar >= '0' && thisChar <= '9')) {
[output appendFormat:@"%c", thisChar];
} else {
[output appendFormat:@"%%%02X", thisChar];
}
}
return output;
}

然后将其转换为 URL。

在您的特定场景中,您使用的是 Mantle JSON 转换器。所以你能做的是;

+ (NSValueTransformer *)logoURLJSONTransformer {
return [MTLValueTransformer transformerUsingReversibleBlock:^id(NSString *str, BOOL *success, NSError *__autoreleasing *error) {
if (success) {
NSString *urlEncodedString = [self urlencodeString:str];
return [NSURL URLWithString:urlEncodedString];
}else{
return @"";
}

}];
}

关于ios - 带空格的字符串无法转换为 NSURL - Mantle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129992/

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