1

長い一連のプレゼンテーションからのすべてのスピーカーの名前を含む並べ替えられた配列があります。以下のコードを貼り付けましたが、特定の問題は完全に 2 番目の「for」ループ内にあります。MyClass.speeches に複数のエントリを持つ発表者が複数います。そのため、2 番目の「for」ループ内で「if」ステートメントを初めてヒットし、それが true と評価されたときに、「スピーチを追加しました...」というログ ステートメントが表示されます。ただし、2 回目には true と評価される必要があります (「if」のすぐ上のログ ステートメントで確認されているように)、ログに「追加されたスピーチ...」行が出力されることはありません。では、「item.speaker」と「obj」が最初に同じであるのに、なぜ「if」に入らないのでしょうか?

[speakers sortUsingSelector:@selector(compare:)];
   for (id obj in speakers) { 

     //now create a unique list of speakers
        if ([uniqP containsObject:obj]) {
            NSLog(@"already have this object");
        }
        else {
            [uniqP addObject:obj];

            //now that we've found a new speaker, we need to go through the entire list of speeches and populate
            //them in the correct order.
            self.speechesByPresenter = [[NSMutableArray alloc] init];
            for (int j=0; j<numEntries; j++) {
                SpeechesItem *item = [MyClass.speeches objectAtIndex:j];
                NSLog(@"  %@--%@--%d  (%@)", item.speaker, obj, j, item.title);
                if(item.speaker == obj) {
                    [self.speechesByPresenter addObject:item];
                    NSLog(@"added a speech, %@ now has %d", item.speaker, [self.speechesByPresenter count]);
                }
            }
        }
    }
4

1 に答える 1

0

item.speaker == objポインターを比較する代わりに[item.speaker isEqualToString:obj]、文字列の内容を比較する which を使用する必要があります。

于 2012-08-06T03:41:26.243 に答える