快速枚举错误?

时间:2012-02-15 00:19:39

标签: ios

收到警告说:

集合表达式类型'NSString *'可能无法响应'countByEnumeratingWithState:objects:count'

尝试运行以下代码时:

 NSString *proper = [NSString stringWithContentsOfFile:@"usr/share/dict/propernames"     encoding:NSUTF8StringEncoding error:NULL];


for (NSString *i in proper){
        NSLog(@"Item>%@", i);
        }

当我运行程序时,我没有从NSLog语句中获得任何输出。有人碰到这个吗?

3 个答案:

答案 0 :(得分:3)

编译器警告试图告诉您不能使用NSString循环迭代for ... in ...。它进一步试图说,原因是NSString不是有效的"集合"类型。您有效的"收藏"类型包括NSArrayNSSetNSDictionary

因此,如果您的文件应包含结构化数据,则应将其解析为比平面NSString更有用的内容。这样的事情可能会带来更好的结果:

NSString* temp = [NSString stringWithContentsOfFile:@"usr/share/dict/propernames"     encoding:NSUTF8StringEncoding error:NULL];
NSArray* proper = [temp componentsSeparatedByString:@"\n"];

for (NSString* i in proper){
    NSLog(@"Item>%@", i);
}

这将打印文件中的每一行。当然,这假定您的输入文件每行有一个条目。如果它是以其他方式构建的,那么你将不得不以不同的方式解析它。

答案 1 :(得分:0)

加载文件后,将其拆分为使用componentsSeparatedByString:。

的行
NSArray *lines = [proper componentsSeparatedByString:@"\n"]; // Use the correct line ending character here
for (NSString *i in lines) {
    NSLog(@"item> %@", i);
}

答案 2 :(得分:0)

这是你在这里的一个明显的错误。 NSString *是一个字符串对象,它不是字符集合,而是C ++中已知的字符串对象,它是一个字符数组。 for-in循环需要一个集合来迭代。像NSArray或NSSet。