我正在查看我的数组并找到搜索到的单词所在的索引。我使用该信息在单词之间放置空格,直到我到达下一个单词。我保存该文本,然后将其存储在变量中。
我怀疑我在lastObject和arr objectAtIndex:i之间的比较是不行的,但我似乎无法弄清楚为什么?
NSArray * arr;
NSScanner *scanner = [NSScanner scannerWithString:_exerciseDocument];
while(![scanner isAtEnd])
{
NSString *buffer;
if([scanner scanCharactersFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] intoString:&buffer])
{
[scanner scanUpToString:" " intoString:&buffer];
[scanner scanString:@" " intoString:nil];
}
else
{
}
for(int i=0; i <arr.count; i++)
{
NSString *stringToCheck = (NSString *)[arr objectAtIndex:i];
if([stringToCheck isEqualToString:@"Fokus:"])
{
_descriptionIndex = i;
}
if([stringToCheck isEqualToString:@"Niveau:"])
{
_focusIndex = i;
}
if([stringToCheck isEqualToString:@"Redskab:"])
{
_niveauIndex = i;
}
if([stringToCheck isEqualToString:@"Vanddybde:"])
{
_equipmentIndex = i;
}
}
_descriptiontToTextField = [[NSString alloc]init];
for(int i=1; i <_descriptionIndex; i++)
{
if(![[arr lastObject] isEqual:[arr objectAtIndex:i]])
{
_descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:[ arr objectAtIndex:i]];
_descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:@" "];
}
else
{
_descriptiontToTextField = [_descriptiontToTextField stringByAppendingString:[ arr objectAtIndex:i]];
}
}
答案 0 :(得分:1)
if-statement永远不会结果为YES,因为你的for循环总是在到达数组中的最后一个对象之前终止:i&lt; _descriptionIndex。
答案 1 :(得分:1)
我想你想比较数组中的最后一个对象和数组中的所有对象,但isEqual用于比较两个对象的类型,而不是对象中的值,正如你所看到的那样
NSArray * arr = [_exerciseDocument componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
这将创建arr作为字符串数组意味着所有对象都是[NSString class]
类型if(![[arr lastObject] isEqual:[arr objectAtIndex:i]])
因为所有对象都是相同类型,所以isEqual将返回true,因此你的代码将在else部分运行,因为if条件中的否定因此使用isEqualToString来比较字符串
答案 2 :(得分:1)
首先,-[NSString componentsSeparatedByCharactersInSet:]
无法按照您的想法运作。如果_exerciseDocument
中的单词之间有多个空格,那么arr
中的大量空字符串将会结束,这不是您想要的。您可能需要考虑使用NSScanner
(默认情况下,跳过空格和换行符)来创建数组。
其次,arr包含字符串,没有其他类型的对象。鉴于此,您应该使用-[NSString isEqualToString:]
代替比较。
第三,你是否有理由在索引1处开始第二次循环而不是索引0?