NSArray из NSSet ничего не показывает в NSLog - PullRequest
0 голосов
/ 28 ноября 2011
NSMutableSet *intersection = [NSMutableSet setWithArray:newsmall];

//this shows an array of newsmall as expected
NSLog(@"intersection %@", intersection);

[intersection intersectSet:[NSSet setWithArray:newnewbig]];

//this shows nothing
NSLog(@"intersection %@", intersection);

//this shows an array of newnewbig as expected
NSLog(@"newnewbig %@", newnewbig);

NSArray *arrayfour = [intersection allObjects];

//this shows nothing
NSLog(@"arrayfour %@", arrayfour);

У newsmall и newnewbig есть несколько совпадающих строк, поэтому я ожидаю, что arrayfour покажет пару строк.

Что я сделал не так?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Проблема в том, что вы понимаете, как работает intersectSet.

Я думаю, вы ожидаете, что он сравнит содержимое строк из newsmall и newnewbig, но на самом деле он сравнивает адреса объектов.

Сделайте это, прежде чем совершить intersectSet звонок:

NSUInteger index = 0;
for(NSString * aString in newsmall)
{
    NSLog( @"newsmall string %d is %p %@", index++, aString, aString );
} 

index = 0;
for(NSString * aString in newnewbig)
{
    NSLog( @"newnewbig string %d is %p %@", index++, aString, aString );
}

intersectSet будет работать только в том случае, если адрес (%p в форматировании там) совпадает. Содержимое строки может совпадать, но для intersectSet важен адрес строки.

Так что на самом деле ваше решение заключается в том, что вам нужно сделать другой способ сравнения строк между наборами.

2 голосов
/ 28 ноября 2011

Когда вы звоните intersectSet, я думаю, что он сравнивает указатели, а не содержимое вашего NSString.

Посмотрите здесь, это может помочь: ТАК вопрос

...