1

これが私のコードです:

    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    NSLog(@"Row %i at View: %@",indexPath.row, [delegate.my_condition objectAtIndex:indexPath.row]);
   if ([@"0" isEqualToString:[delegate.my_condition objectAtIndex:indexPath.row]]){
        NSLog(@"Store is closed");
   } else {
       NSLog(@"Store is open");

そしてログに私は見ます:

2012-08-29 22:33:59.434 MyApp[2593:c07] Row 0 at View: 0
2012-08-29 22:33:59.435 MyApp[2593:c07] Store is open
2012-08-29 22:33:59.437 MyApp[2593:c07] Row 1 at View: 0
2012-08-29 22:33:59.438 MyApp[2593:c07] Store is open
2012-08-29 22:33:59.440 MyApp[2593:c07] Row 2 at View: 0
2012-08-29 22:33:59.441 MyApp[2593:c07] Store is open

したがって、値が0であることがわかりますが、if句ではなくelse句が表示されます。

何故ですか?

myCondition is NSMutableArray

これが、NSMutableArrayにアイテムを追加する方法です。

NSString *parsed=[res objectForKey:@"Data"];
    [delegate.my_condition addObject:parsed];
4

4 に答える 4

3

ここには決定的な答えを提供するのに十分な情報はありませんが、いくつかの可能性が見えます。

  1. オブジェクトは、末尾にスペースがある文字列です。"0"は と等しくありません"0 "が、ログ出力では同じように見えます。
  2. このオブジェクトは、実際にはNSNumber値が 0 の です。ロギングでは同じように見えますが、同等のオブジェクトにはなりません。オブジェクトのクラスを確認してみてください。
于 2012-08-29T19:43:52.863 に答える
0

あなたの NSMutableArray は文字列を返していますか? これは、文字列ではなく NSNumber 型を返しているために発生している可能性があります。その場合、stringValue をオブジェクトの末尾に配置して、文字列に変換することができます。

于 2012-08-29T19:47:28.717 に答える
0

の値delegate.my_conditionが文字列であることは確かですか? それらはsのように見えますNSNumber*。そしてもちろん、NSNumber*が と等しくなることはありませんNSString*

あなたは次のようなことを試してみたいかもしれません

if ([[delegate.my_condition objectAtIndex:indexPath.row] intValue] == 0) {
    NSLog(@"Store is closed");
} // ...

NSNumber*代わりに、値がまたは数値NSString*を表すであると仮定します。

于 2012-08-29T19:44:01.423 に答える
-1

次のように、条件を反転してみてください。

if ([[delegate.my_condition objectAtIndex:indexPath.row] isEqualToString:@"0"]) {

また

NSString *_string = [delegate.my_condition objectAtIndex:indexPath.row];
if ([_string isEqualToString:@"0"]) {

そのような文字列で関数を呼び出すと問題が発生する可能性があります

于 2012-08-29T19:45:25.387 に答える