Если оператор не работает с indexpath должным образом - PullRequest
0 голосов
/ 19 января 2012

Я удивляюсь, если я делаю что-то не так с этим оператором if ...

Я сравниваю два indexPath, и старый, и текущий выбранный, если они не равны.в противном случае продолжайте как обычно ..

однако мой if всегда доступен, даже если они есть! = .. я делаю что-то не так ... Я знаю, вы можете проверить IsEqual: здесь что-то подобное для!=?

вот мой код и вывод

NSLog(@"%@", modelIndexPath);
            NSLog(@"%@", oldCheckedIndexPath);
            NSLog(@"%@", indexPath);
            if (modelIndexPath != indexPath) {
                NSLog(@"Not Equal");
                NSLog(@" ");
            }

2012-01-19 16:09:06.521 Code[9907:207] (null)
2012-01-19 16:09:06.522 Code[9907:207] (null)
2012-01-19 16:09:06.523 Code[9907:207] <NSIndexPath 0xc2993e0> 2 indexes [9, 0]
2012-01-19 16:09:06.524 Code[9907:207] Not Equal
2012-01-19 16:09:06.525 Code[9907:207]  
2012-01-19 16:09:17.921 Code[9907:207] <NSIndexPath 0xc2993e0> 2 indexes [9, 0]
2012-01-19 16:09:17.922 Code[9907:207] <NSIndexPath 0xc2993e0> 2 indexes [9, 0]
2012-01-19 16:09:17.923 Code[9907:207] <NSIndexPath 0xc5b0c50> 2 indexes [9, 0]
2012-01-19 16:09:17.924 Code[9907:207] Not Equal
2012-01-19 16:09:17.925 Code[9907:207]  
2012-01-19 16:09:29.489 Code[9907:207] <NSIndexPath 0xc5b0c50> 2 indexes [9, 0]
2012-01-19 16:09:29.490 Code[9907:207] <NSIndexPath 0xc5b0c50> 2 indexes [9, 0]
2012-01-19 16:09:29.491 Code[9907:207] <NSIndexPath 0xc7886c0> 2 indexes [9, 2]
2012-01-19 16:09:29.491 Code[9907:207] Not Equal
2012-01-19 16:09:29.492 Code[9907:207]  
2012-01-19 16:09:34.945 Code[9907:207] <NSIndexPath 0xc7886c0> 2 indexes [9, 2]
2012-01-19 16:09:34.946 Code[9907:207] <NSIndexPath 0xc7886c0> 2 indexes [9, 2]
2012-01-19 16:09:34.946 Code[9907:207] <NSIndexPath 0xc89e780> 2 indexes [9, 2]
2012-01-19 16:09:34.947 Code[9907:207] Not Equal
2012-01-19 16:09:34.948 Code[9907:207]  
2012-01-19 16:09:37.601 Code[9907:207] <NSIndexPath 0xc89e780> 2 indexes [9, 2]
2012-01-19 16:09:37.602 Code[9907:207] <NSIndexPath 0xc89e780> 2 indexes [9, 2]
2012-01-19 16:09:37.602 Code[9907:207] <NSIndexPath 0xc94e480> 2 indexes [9, 1]
2012-01-19 16:09:37.603 Code[9907:207] Not Equal
2012-01-19 16:09:37.604 Code[9907:207] 

ОБНОВЛЕНИЕ:

вот текущее состояние дел с помощью вас, ребята

NSLog(@"%@", modelIndexPath);
            NSLog(@"%@", oldCheckedIndexPath);
            NSLog(@"%@", indexPath);

            if ( [modelIndexPath isEqual:indexPath] ) NSLog(@"hurray!");
            if ( ![modelIndexPath isEqual:indexPath] ) NSLog(@"bummer");
            NSLog(@" ");



2012-01-19 16:41:54.853 Code[11071:207] (null)
2012-01-19 16:41:54.854 Code[11071:207] (null)
2012-01-19 16:41:54.855 Code[11071:207] <NSIndexPath 0xc21f9a0> 2 indexes [9, 0]
2012-01-19 16:41:54.856 Code[11071:207] bummer
2012-01-19 16:41:54.856 Code[11071:207]  
2012-01-19 16:41:59.637 Code[11071:207] <NSIndexPath 0xc21f9a0> 2 indexes [9, 0]
2012-01-19 16:41:59.637 Code[11071:207] <NSIndexPath 0xc21f9a0> 2 indexes [9, 0]
2012-01-19 16:41:59.638 Code[11071:207] <NSIndexPath 0x6a73e10> 2 indexes [9, 0]
2012-01-19 16:41:59.639 Code[11071:207] hurray!
2012-01-19 16:41:59.639 Code[11071:207]  
2012-01-19 16:42:05.492 Code[11071:207] <NSIndexPath 0x6a73e10> 2 indexes [9, 0]
2012-01-19 16:42:05.493 Code[11071:207] <NSIndexPath 0x6a73e10> 2 indexes [9, 0]
2012-01-19 16:42:05.494 Code[11071:207] <NSIndexPath 0x6aae9d0> 2 indexes [9, 0]
2012-01-19 16:42:05.494 Code[11071:207] hurray!
2012-01-19 16:42:05.495 Code[11071:207]  
2012-01-19 16:42:10.901 Code[11071:207] <NSIndexPath 0x6aae9d0> 2 indexes [9, 0]
2012-01-19 16:42:10.902 Code[11071:207] <NSIndexPath 0x6aae9d0> 2 indexes [9, 0]
2012-01-19 16:42:10.902 Code[11071:207] <NSIndexPath 0xc625470> 2 indexes [9, 2]
2012-01-19 16:42:10.903 Code[11071:207] bummer

Ответы [ 4 ]

4 голосов
/ 19 января 2012

NSIndexPath - объект, сравните их, используя

if (![modelIndexPath isEqual:indexPath])

Edit: возможно, отправьте больше кода, приведенный выше код должен подойти, или вы также можете сделать это (зависит от ваших потребностей в любом случае)

int modelRow = [modelIndexPath row];
int indexRow = [indexPath row];

if (modelRow != indexRow)
{
    // Do something here
}

Обратите внимание, что это будет работать только в зависимости от ваших потребностей!

2 голосов
/ 19 января 2012

Эти NSIndexPath вещи являются объектами, и вы сравниваете их адреса памяти. Другими словами, modelIndexPath и indexPath являются указателями . (гугл твой друг)

Для сравнения этих объектов используйте:

if ( [modelIndexPath isEqual:indexPath] ) NSLog(@"hurray!");

или

if ( ![modelIndexPath isEqual:indexPath] ) NSLog(@"bummer");

для проверки на неравенство.

1 голос
/ 19 января 2012

использовать isEqual: вместо ==

== означает, что если две контрольные точки на один и тот же объект

isEqual: означает, что объект равен

if ([modelIndexPath isEqual: indexPath]) {
                NSLog(@"Not Equal");
                NSLog(@" ");
            }
1 голос
/ 19 января 2012

Вы сравниваете адреса экземпляров. Используйте if (![modelIndexPath isEqual:indexPath]) { //...

...