检查字符串中是否包含表情符号

2023-11-25

我用这个得到字符串的文本大小

textSize = [[tempDict valueForKeyPath:@"caption.text"] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX) lineBreakMode: NSLineBreakByWordWrapping];

我遇到的唯一问题是,如果字符串仅包含表情符号,我的应用程序就会崩溃。有没有一种简单的方法来检查表情符号,或者我是否必须创建一个包含所有可能的表情符号的数组,然后使用它来检查它们?

error:

-[NSNull sizeWithFont:constrainedToSize:lineBreakMode:]: unrecognized selector sent to instance 0x3aa88a60


if ([tempDict valueForKeyPath:@"caption.text"]){
            NSLog(@"%@", [tempDict valueForKeyPath:@"caption"]);
            //Measure the message label box height
            textSize = [[tempDict valueForKeyPath:@"caption.text"] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX) lineBreakMode: NSLineBreakByWordWrapping];
            int height = 320 + 20 + textSize.height;
            [cellHeight addObject:[NSNumber numberWithInt:height]];
}

试试这个代码:

- (BOOL)stringContainsEmoji:(NSString *)string {
    __block BOOL returnValue = NO;
    [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
     ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

         const unichar hs = [substring characterAtIndex:0];
         // surrogate pair
         if (0xd800 <= hs && hs <= 0xdbff) {
             if (substring.length > 1) {
                 const unichar ls = [substring characterAtIndex:1];
                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                 if (0x1d000 <= uc && uc <= 0x1f77f) {
                     returnValue = YES;
                 }
             }
         } else if (substring.length > 1) {
             const unichar ls = [substring characterAtIndex:1];
             if (ls == 0x20e3) {
                 returnValue = YES;
             }

         } else {
             // non surrogate
             if (0x2100 <= hs && hs <= 0x27ff) {
                 returnValue = YES;
             } else if (0x2B05 <= hs && hs <= 0x2b07) {
                 returnValue = YES;
             } else if (0x2934 <= hs && hs <= 0x2935) {
                 returnValue = YES;
             } else if (0x3297 <= hs && hs <= 0x3299) {
                 returnValue = YES;
             } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
                 returnValue = YES;
             }
         }
     }];

    return returnValue;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查字符串中是否包含表情符号 的相关文章

随机推荐

  • 无法在“ApplicationUser”上配置密钥,因为它是派生类型,但 ApplicationUser 上没有密钥配置

    我正在尝试使用 ApplicationUser 自定义 IdentityUser 我按照微软文章中的步骤操作 但是当我运行应用程序时 我在方法上收到此错误base OnModelCreating modelBuilder System In
  • ES6 对象中的方法:使用箭头函数

    在 ES6 中 这两个都是合法的 var chopper owner Zed getOwner function return this owner 并且 作为简写 var chopper owner Zed getOwner return
  • 如何使用 mongo Java 驱动程序 3.0+ 检查文档是否存在于集合中

    使用新的3 0 java驱动程序来自 mongo 检查文档是否存在于集合中的最佳方法是什么 我看过here并尝试做类似的事情 我只做到了这一点 FindIterable
  • 如何仅删除字符串中的 html 标签?

    我已经编写了删除 HTML 标签的代码 但它也删除了a
  • 除了日志记录和事务管理之外,AOP 还有哪些实际应用?

    我理解这些原理 但我很难看出实际应用在哪些地方 请赐教 询问任何支持人员 日志记录是notAOP的一个很好的应用 他们不关心应用程序内部调用什么方法 他们关心应用程序正在执行的重要操作 并需要以他们理解的方式呈现该信息 要创建像样的日志 您
  • 3DSv2 Sagepay 直接集成基础知识

    协议 4 00 的文档可能会更有帮助 对于每个努力让 3DSV2 工作的人来说 我希望任何已经设法让 3DSV2 工作的人能够详细阐述基础知识 我将根据我的理解总结流程 请大家帮忙纠正必要的地方并添加任何问题 例如从 VPSTx Id 中删
  • 如何在 pyspark pandas_udf 中记录/打印消息?

    我已经测试过logger and print无法打印消息pandas udf 无论是在集群模式还是客户端模式 测试代码 import sys import numpy as np import pandas as pd from pyspa
  • 具有任意类型值的 C++ 关联数组

    在 C 中为每个键创建具有任意值类型的关联数组的最佳方法是什么 目前我的计划是创建一个 值 类 其中包含我期望类型的成员变量 例如 class Value int iValue Value int v iValue v std string
  • 如何禁用底部的反应本机警告消息

    我正在开发一个react native IOS应用程序 这个应用程序有时会引发一条警告消息 setState 只能更新已安装或正在安装的组件 我明白该消息的含义 这是由于长时间的AJAX调用造成的 考虑到这个警告不会对APP造成任何严重的问
  • HTTP 错误 500.19 - 内部服务器错误?

    我正在将一个非常基本的站点从 Win 2003 迁移到 Win 2008 R2 该网站出现下面列出的错误 我该如何诊断这个问题 我在这两台服务器之间移动了许多其他站点 这是唯一收到此错误的站点 我看过有关此问题的其他帖子 但没有一个列出适合
  • 使用 Nhibernate 过滤通过聚合根返回的子集合

    我正在尝试在使用 Nhibernate 加载聚合根时过滤它的子集合 向客户加载所有已发货的订单 这可能吗 那么 您可以公开在地图中过滤的属性 如下所示
  • 如何在 processStartInfo 中传递多个参数?

    我想运行一些cmd命令来自c 代码 我关注了一些博客和教程并得到了答案 但我有点困惑 即我应该如何传递多个参数 我使用以下代码 System Diagnostics Process process new System Diagnostic
  • Python美汤表单输入解析

    我的目标是获取所有输入名称和值的列表 将它们配对并提交表格 名称和值是随机的 from bs4 import BeautifulSoup parsing html
  • 可以设置Python对象的任何属性[重复]

    这个问题在这里已经有答案了 例如 这段代码是Python a object a b 3 throws AttributeError object object has no attribute b 但是 这段代码 class c objec
  • 将 sonar.test.exclusions 与 Sonarqube 6.3 一起使用

    我目前正在评估 Sonarqube 6 3 对我当前的 5 5 实例进行了重大升级 并且在尝试找出该功能的过程中我感到很困惑声纳 测试 排除环境 有这样一个问题 Sonar Maven 插件 如何排除测试源目录 这似乎表明它用于从分析中排除
  • Python 中的重复数据删除

    在浏览 Python 中用于重复数据删除的 Dedupe 库的示例时 我发现它创建了一个集群 ID输出文件中的列 根据文档 该列指示哪些记录相互引用 虽然我无法找出两者之间的任何关系集群 ID这对查找重复记录有什么帮助 如果有人对此有见解
  • Java线程阻塞

    我的java环境有问题 我运行 Solr 1 3 搜索引擎 已有一年多了 突然间我遇到了很多麻烦 我所有的线程池 250 每天都会被随机阻塞一两次 我没有对 solr 应用程序或 tomcat 服务器进行任何更改 我正在运行 tomcat
  • 测试两个 __m128i 变量之间的相等性

    如果我想在两个之间进行按位相等测试 m128i变量 我是否需要使用 SSE 指令或者我可以使用 如果不是 我应该使用哪条SSE指令 虽然使用 mm movemask epi8是一种解决方案 如果您有一个带有 SSE4 1 的处理器 我认为更
  • 获取点击事件中按钮的 ID/名称。网络

    我在 VB NET 中有一个事件可以同时处理多个按钮单击 我需要知道选择的哪个按钮启动了事件 有什么想法如何做到这一点 我的代码如下 Private Sub Answer Click ByVal sender As System Objec
  • 检查字符串中是否包含表情符号

    我用这个得到字符串的文本大小 textSize tempDict valueForKeyPath caption text sizeWithFont UIFont systemFontOfSize 12 constrainedToSize