无论出于何种原因,我似乎无法弄清楚我无法获得正确比较两个字符串的代码。我有一个对象数组(包含字符串:group的配置文件),如果它的组与字符串不匹配,我只想删除此配置文件对象。
这就是我所拥有的:
Profile对象.h文件:
@property (nonatomic, copy) NSString *group;
正在查看数组并转出错误配置文件的控制器文件 - 其.h文件:
@property (nonatomic, copy) NSString *buttonSelected;
当用户选择一个按钮时,设置此* buttonSelected,代码只检查发件人标签并分配相应的字符串,如下所示:
[controller setbuttonSelected:@"My Button Has Been Selected"];
当我尝试比较这个buttonSelected和数组对象 - 这是一个具有组属性的配置文件对象时出现问题:
_profileArray = [xmlParser profiles];
for(int i=0; i<[_profileArray count]; i++){
NSLog(@"Comparing button: %@ and group: %@", [self buttonSelected], [[_profileArray objectAtIndex:i] group]);
if([[self buttonSelected] isEqualToString:[[_profileArray objectAtIndex:i] group]]) NSLog(@"Equal");
}
_profileArray有3个对象,其中只有两个对象的组实际上等于buttonSelected。所以我应该只有系统输出2“等于”,但它从不输出“等于”。
答案 0 :(得分:0)
为什么不首先在更容易调试的部分中破坏代码然后逐步执行它。我会做这样的事情。
NSString *buttonSelectedToCompareAgainst = [self buttonSelected];
NSLog(@"button selected was: %@", buttonSelectedToCompareAgainst);
NSString *profileGroupString;
NSComparisonResult compareResult;
for(Profile *profile in _profileArray){
NSLog(@"Checking profile: %@", profile);
profileGroupString = [profile group];
NSLog(@"Checking profile group: %@", profileGroupString);
compareResult = [buttonSelectedToCompareAgainst caseInsensitiveCompare:profileGroupString];
NSLog(@"compare result: %d", compareResult);
}
答案 1 :(得分:0)
弄清楚了。我正在从不同的数组中清除空白等,而不是我用来比较字符串的空格,因此比较永远不会像他们应该的那样出现。清理阵列后,我正在使用一切正常。