收到警告说:
集合表达式类型'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语句中获得任何输出。有人碰到这个吗?
答案 0 :(得分:3)
编译器警告试图告诉您不能使用NSString
循环迭代for ... in ...
。它进一步试图说,原因是NSString
不是有效的"集合"类型。您有效的"收藏"类型包括NSArray
,NSSet
和NSDictionary
。
因此,如果您的文件应包含结构化数据,则应将其解析为比平面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。