如何测试 NSMutableArray 中是不是存在 _NSCFConstantString?
Posted
技术标签:
【中文标题】如何测试 NSMutableArray 中是不是存在 _NSCFConstantString?【英文标题】:How to test if there is an _NSCFConstantString in an NSMutableArray?如何测试 NSMutableArray 中是否存在 _NSCFConstantString? 【发布时间】:2013-07-06 05:40:08 【问题描述】:好的,所以我有一个包含 tableView 的 Popover,它由填充字符串的 NSMutableArray
填充。但是我的NSMutableArray
中总是有一个blank/empty
字符串,而我的弹出表中总是有一个空单元格。我单步执行我的项目,发现空字符串是字符串常量(_NSCFConstantString)。
我试图通过做一个简单的空字符串测试来摆脱空字符串的出现:
[str isEqualToString:@""]
但这不起作用,我假设是因为我的数组中的空字符串的类型是 _NSCFConstantString...?
所以我想知道是否有一种方法可以测试对象是否为_NSCFConstantString
类型,或者你们是否有更好的方法来测试字符串是否为空...
这是与我的问题相关的完整代码:
NSString *str;
for (int i = 0; i < [self.flattenedDocList count]; i++)
str = [self.flattenedDocList objectAtIndex:i];
if(![str isKindOfClass:[NSString class]])
[self.flattenedDocList removeObject: str];
NSLog(@"Just Deleted:%@",str);
else if([str isEqualToString:@""])
[self.flattenedDocList removeObject: str];
NSLog(@"Just Deleted:%@",str);
第一个 if 语句是一个检查以删除我数组中的任何 NSNull
对象。不幸的是,这并没有摆脱字符串常量:/
谢谢,非常感谢您的帮助。
【问题讨论】:
【参考方案1】:好吧,所以我犯了在枚举时修改 NSMutableArray 的菜鸟错误。另外,H2CO3
是对的,_NSCFConstantString
是 NSString 的具体子类,所以我们可以对它们使用所有 NSString 方法。
这是一个在枚举 NSMutableArray 时修改它的好方法。
NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:self.docList];
self.listForThePopover = [[NSMutableArray alloc] init];
NSString *str;
for (int i = 0; i < [tempArray count]; i++)
str = [tempArray objectAtIndex:i];
//NSLog(@"~str:%@~",str);
//check if the str is of the NSString class AND if it's NOT empty
if(([str isKindOfClass:[NSString class]]) && (![str isEqualToString:@""]))
//add the string to the list that we want to actually use.
[self.listForThePopover addObject:str];
//NSLog(@"Just Added:%@",str);
【讨论】:
【参考方案2】:但这不起作用,我假设是因为我的数组中的空字符串是
_NSCFConstantString
...?
不完全是。 _NSCFConstantString
是 NSString
的具体子类,所以它应该可以工作。
也许字符串不是真的和空字符串,或者它不在数组中。偶然检查它是否是一个空间(或更多)。检查其length
属性等。
顺便说一句,在枚举可变集合的同时修改它是一个非常糟糕的主意,这会导致逻辑错误。在这种情况下,也许这也是您当前问题的一部分。
【讨论】:
你说得对,它并不是真正的空字符串,也不是真正的数组。它不会被循环,因此为什么它没有通过任何测试或打印出来。所以我不明白为什么我在打印整个数组时会在数组中看到它,以及为什么它会出现在我的 tableView 中。我读到 NSCFConstantString 用于编译器中的字符串优化,所以也许它是我的字符串中的空白?但我不知道... @Jim-Dingo__NSCFConstantString
是一个用于字符串文字的类。当您像这样在代码中编写一个常量字符串:@"foo"
时,编译器会发出此类的一个实例。如果它不在数组中,那么您的代码中某处存在逻辑错误。也许也显示你的日志输出?
@H2CO3关于在枚举数组时尝试修改数组时可能发生的逻辑错误,您是对的。空字符串从未通过测试,因为它从未被枚举!我最初设置枚举过程是为了仔细考虑逻辑错误,但是做了一个愚蠢的改变它的举动(已经很晚了,我整天都在编码,所以我没有想清楚xD)以上是关于如何测试 NSMutableArray 中是不是存在 _NSCFConstantString?的主要内容,如果未能解决你的问题,请参考以下文章
如何访问 NSMutableArray 中的 JSON 数据?
如何在 NSMutableArray 中选择特定索引并存储在 nsarray [关闭]
如何在ios的同一个Nsmutablearray中存储旧值和新值