1

何らかの理由で、コードで 2 つの文字列を適切に比較できない理由がわかりません。オブジェクト (文字列を含むプロファイル: グループ) の配列があり、そのグループが文字列と一致しない場合は、このプロファイル オブジェクトを削除したいだけです。

これは私が持っているものです:

プロファイル オブジェクトの .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 つだけです。したがって、システム出力 2 は "Equal" のみである必要がありますが、"Equal" は出力されません。

4

2 に答える 2

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);
}
于 2012-11-08T15:37:14.700 に答える
0

わかった。文字列の比較に使用していた配列ではなく、別の配列から空白などを削除していたため、本来の比較結果が得られませんでした。アレイをクリーニングした後、使用していたすべてが正常に機能しました。

于 2012-11-08T16:22:11.497 に答える