3

好的,所以我有一个包含 tableView 的 Popover,它由一个NSMutableArray填充的字符串填充。但是在我的弹出表中总是有一个blank/empty字符串,NSMutableArray而我的弹出表中总是有一个空单元格。我单步执行了我的项目,发现空字符串是字符串常量(_NSCFConstantString)。

我试图通过做一个简单的空字符串测试来摆脱空字符串的出现:

[str isEqualToString:@""] 

但这不起作用,我假设因为我的数组中的空字符串是 _NSCFConstantString 类型的......?

所以我想知道是否有一种方法可以测试一个对象是否是 type _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数组中的任何对象。不幸的是,这并没有摆脱字符串常量:/

谢谢,非常感谢您的帮助。

4

2 回答 2

2

好吧,所以我犯了在枚举时修改 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);
    }
}
于 2013-07-07T03:29:07.147 回答
0

但这不起作用,我假设因为我的数组中的空字符串是类型_NSCFConstantString......?

不完全的。_NSCFConstantString是 的一个具体子类NSString,所以它应该可以工作。

也许字符串不是真正的空字符串,或者它不在数组中。偶然检查它是否是一个空间(或更多)。检查其length属性等。

顺便说一句,在枚举可变集合时修改它是一个非常糟糕的主意,它可能会导致逻辑错误。在这种情况下,也许这也是您当前问题的一部分。

于 2013-07-06T05:44:11.637 回答