- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个表情符号菜单,用户可以在其中选择它们并在图片之上使用。但是,很难让“最近选择的表情符号”部分正常工作,因为可能是 NSUserDefaults。当我在 8 个 View 中的任何一个中选择一个表情符号时,这个表情符号被添加到一个 NSMutableArray 中,并且下次我打开表情符号菜单时,这个表情符号是第一个出现在“最近选择的表情符号” View 中的,正如预期的那样。我实现了以下代码,这样当我选择一个表情符号时(直接通过“最近选择的表情符号 View ”或者只是通过其他 8 个 View 中的任何一个 - 这 9 个 View 通过水平 ScrollView 连接 - 如果这个表情符号已经出现在“最近选择的表情符号 View ”中,它从 View 中删除并添加到 View 的开头)。实际上,我从表情符号数组的索引中删除,从“最近选择的表情符号” View 中删除所有 subview ,并根据新的表情符号数组用 subview 重新填充它:
- (void)emojiButtonPressed:(UIButton *)button {
NSLog(@"ARRAY EQUALS = %@", historicEmojiQueue);
NSLog(@"ARRAY AMOUNT EQUALS = %lu", (unsigned long)[historicEmojiQueue count]);
if ([historicEmojiQueue count] < 30){
NSLog(@"Not full");
for ( int j = 0; j < [historicEmojiQueue count]; j++){
NSLog(@"IN THE LOOP - START PRINT");
NSLog(@"%@", button.titleLabel.text);
NSLog(@"%@", historicEmojiQueue[j]);
NSLog(@"IN THE LOOP - END PRINT");
if ( button.titleLabel.text == historicEmojiQueue[j] ){
NSLog(@"EQUAL ADDITION TO ITEM ALREADY PRESENT");
[historicEmojiQueue removeObjectAtIndex:j];
}
}
[historicEmojiQueue insertObject:button.titleLabel.text atIndex:0];
}
else{
NSLog(@"Full");
BOOL equal = NO;
for ( int j = 0; j < [historicEmojiQueue count]; j++){
NSLog(@"IN THE LOOP - START PRINT");
NSLog(@"%@", button.titleLabel.text);
NSLog(@"%@", historicEmojiQueue[j]);
NSLog(@"IN THE LOOP - END PRINT");
if ( button.titleLabel.text == historicEmojiQueue[j] ){
NSLog(@"EQUAL ADDITION TO ITEM ALREADY PRESENT");
[historicEmojiQueue removeObjectAtIndex:j];
equal = YES;
}
}
if (equal == NO){
[historicEmojiQueue removeLastObject];
}
[historicEmojiQueue insertObject:button.titleLabel.text atIndex:0];
}
NSLog(@"ARRAY EQUALS aF= %@", historicEmojiQueue);
NSLog(@"ARRAY AMOUNT EQUALS aF= %lu", (unsigned long)[historicEmojiQueue count]);
[[NSUserDefaults standardUserDefaults] setObject:historicEmojiQueue forKey:@"historicQueue"];
[[NSUserDefaults standardUserDefaults] synchronize];
(MORE CODE THAT DOES NOT AFFECT THE PROBLEM)
}
当我选择一个表情符号时,比方说披萨,然后选择另外 5 个不同的表情符号,然后再次选择披萨,效果非常好:披萨从第六个位置移除并添加到第一个。如果我再次运行该应用程序,我最后的更改将保存到 NSUserDefaults,因此 Pizza 将是第一个显示在“最近选择的表情符号” View 中的表情符号。 现在,如果我再次选择 Pizza,旧的 Pizza 和列表中的第一个不会被删除,并添加新的,然后在数组的第一和第二位置有两个 Pizza 表情符号,然后,在查看。如果我点击 View 中的任何旧表情符号(比如第二个披萨),它就会被删除并添加到开头。在 Pizza 的情况下,点击旧 Pizza(第二个位置)不会产生任何可见的变化,因为它们是相等的,但我确信它们交换了位置。这是 ViewDidLoad 中用于从 NSUserDefaults 获取数组的代码:
NSMutableArray * historicEmojiQueue;
@implementation myEmojiView
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
NSMutableArray * permanentQueue = [[NSUserDefaults standardUserDefaults] objectForKey: @"historicQueue"];
if ( permanentQueue == NULL) {
historicEmojiQueue = [[NSMutableArray alloc] init];
[[NSUserDefaults standardUserDefaults] setObject:historicEmojiQueue forKey:@"historicQueue"];
}
else{
historicEmojiQueue = [[NSMutableArray alloc] initWithArray:permanentQueue copyItems:YES];
}
}
(MORE CODE)
}
我的问题的原因是第一 block 代码的打印结果:
ARRAY EQUALS = (
"\Ud83c\Udf55",
"\Ud83c\Udf4e",
"\Ud83c\Udf4e",
"\Ud83c\Udf4e",
"\Ud83c\Udf52",
"\Ud83d\Ude18",
"\Ud83d\Ude43",
"\Ud83c\Udfc8",
"\Ud83c\Udf4e",
"\Ud83c\Udf4e",
"\Ud83d\Ude44",
"\Ud83d\Ude0e",
"\Ud83e\Udd14",
"\Ud83d\Ude12",
"\Ud83d\Ude07",
"\Ud83d\Ude1c",
"\Ud83e\Udd11",
"\Ud83d\Ude17",
"\Ud83d\Ude18",
"\Ud83c\Udf55",
"\Ud83c\Udf2d",
"\Ud83c\Udf56",
"\Ud83c\Udf4f",
"\Ud83c\Udf50",
"\Ud83c\Udf4b",
"\Ud83c\Udf4a",
"\Ud83d\Udc2f",
"\Ud83c\Udf46",
"\Ud83d\Udc3d",
"\Ud83d\Ude4a"
)
ARRAY AMOUNT EQUALS = 30
Full
IN THE LOOP - START PRINT
🍕
🍕
IN THE LOOP - END PRINT
IN THE LOOP - START PRINT
🍕
🍎
IN THE LOOP - END PRINT
.... ( LOTS OF OTHER PRINT STATEMENTS INSIDE LOOP)
ARRAY EQUALS aF= (
"\Ud83c\Udf55",
"\Ud83c\Udf55",
"\Ud83c\Udf4e",
"\Ud83c\Udf4e",
"\Ud83c\Udf4e",
"\Ud83c\Udf52",
"\Ud83d\Ude18",
"\Ud83d\Ude43",
"\Ud83c\Udfc8",
"\Ud83c\Udf4e",
"\Ud83c\Udf4e",
"\Ud83d\Ude44",
"\Ud83d\Ude0e",
"\Ud83e\Udd14",
"\Ud83d\Ude12",
"\Ud83d\Ude07",
"\Ud83d\Ude1c",
"\Ud83e\Udd11",
"\Ud83d\Ude17",
"\Ud83d\Ude18",
"\Ud83c\Udf55",
"\Ud83c\Udf2d",
"\Ud83c\Udf56",
"\Ud83c\Udf4f",
"\Ud83c\Udf50",
"\Ud83c\Udf4b",
"\Ud83c\Udf4a",
"\Ud83d\Udc2f",
"\Ud83c\Udf46",
"\Ud83d\Udc3d"
)
ARRAY AMOUNT EQUALS aF= 30
如您所见,即使第一个表情符号与第二个表情符号完全相同,无论是打印出来的还是在它们的 unicode 字符串中,它们都没有通过它们是否相等的检查,就好像它们具有不同的字符串表示形式一样。因为当我不再从 Xcode 运行应用程序并选择两个相同的表情符号时,它们确实通过了检查并打印“已存在的项目的相等添加”,我确信问题与从 NSUserDefaults 检索的数据有关,即使我打印我从 NSUserDefaults 得到的数组,它是完全一样的。从 NSUserDefaults 复制数组时,我尝试了多种方法,例如 [[NSMutableArray alloc] initWithArray:permanentQueue copyItems:YES];
甚至循环遍历 NSUserDefaults 数组复制每个项目,但似乎没有什么可以解决问题。请帮忙! :(
最佳答案
比较字符串的位置
if (button.titleLabel.text == historicEmojiQueue[j])
你应该使用
if ( [button.titleLabel.text isEqualToString:historicEmojiQueue[j]] )
第一个比较它们是否占用相同的内存,第二个比较它们是否匹配。
关于ios - 与 NSUserDefaults 的表情符号比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35021454/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!