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
相关产品推荐
相关产品推荐

