長い一連のプレゼンテーションからのすべてのスピーカーの名前を含む並べ替えられた配列があります。以下のコードを貼り付けましたが、特定の問題は完全に 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]);
}
}
}
}