You need to enable JavaScript to run this app. Objective-C中UILabel设自定义字体时CoreData读取Unicode字符无法显示怎么办
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中UILabel设自定义字体时CoreData读取Unicode字符无法显示怎么办

问题原因

代码中写死的@"\ue907"属于编译期转义序列,Xcode编译时会自动将其转换为对应Unicode编码的单个字符(U+E907),所以可以正常匹配icomoon字体的图标。但你存入CoreData的是\ue904的字面量字符串,实际存储的是\、u、e、9、0、4共6个普通字符,读取后自然只会显示原始转义字符串,不会被识别为图标编码。


解决方案

方案1(推荐):存储时直接保存Unicode字符

修改存储逻辑,存入CoreData前先把十六进制编码转换为实际Unicode字符,后续读取直接赋值即可正常显示,无需额外处理:

// 存储时的处理逻辑
unichar iconCode = 0xe904; // 替换为你要存储的图标十六进制编码
NSString *iconStr = [NSString stringWithCharacters:&iconCode length:1];
// 将iconStr存入CoreData对应字段即可

方案2:读取时转换转义序列

如果存量数据已经存储了转义字符串无法修改存储逻辑,可以在读取后手动转换:

cell.icono.textColor=[UIColor purpleColor];
[cell.icono setFont:[UIFont fontWithName:@"icomoon" size:17]];

NSString *rawStr = gridprinc.icono;
// 提取十六进制编码
NSString *hexCode = [rawStr stringByReplacingOccurrencesOfString:@"\\u" withString:@""];
NSScanner *scanner = [NSScanner scannerWithString:hexCode];
unsigned int codeValue;
[scanner scanHexInt:&codeValue];
// 转换为Unicode字符
NSString *icon = [NSString stringWithFormat:@"%C", (unichar)codeValue];
[cell.icono setText:icon];

额外验证建议

如果转换后还是无法显示,可以加一段调试代码确认字体是否正确加载:

if (![UIFont fontWithName:@"icomoon" size:17]) {
    NSLog(@"icomoon字体未成功加载,请检查Info.plist中是否正确配置了Fonts provided by application项,且字体文件名拼写正确");
}

内容的提问来源于stack exchange,提问作者Raúl Olvera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 19:36:08