2016-10-22 3 views
2

Независимо от того, что я делаю в любой комбинации, NSLog всегда возвращает неверный индексный номер успешно найденного массива-объекта.obj-c не может найти индекс из искомого массива/неправильный вывод

код:

-(void)secondbuttonClickedDivi:(id)sender{ 
    UIButton *xbutton = (UIButton *)sender; 
    // NSLog(@"%@arraysucks",); 
    //NSArray *subviews = [self.coview subviews]; 

    // same bogus oupit of index like in [self.coview subviews] : 
    NSArray *subviews= [[NSArray alloc] initWithObjects:xbutton,nil]; 
    NSLog(@"%@subarray",subviews); 
    NSString *search = [NSString stringWithFormat:@"tag = %ld%@", [sendertag],@";"]; 
    // test search . 
    NSString *dummysearch= @"tag = 54;"; 
    NSLog(@"%@%@",@" : search", search); 
    NSLog(@"%@%@",@" : search",dummysearch); 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"subviews CONTAINS %@",search]; 
    NSLog(@"%@predicate", predicate); 
    NSArray *filteredArray = [subviews filteredArrayUsingPredicate:predicate]; 
    NSString *findtag = [NSString stringWithFormat:@"%@", predicate]; 

    NSString *gettag = [findtag substringFromIndex: 24]; 
    NSString *lastget = [gettag substringToIndex:NSMaxRange([gettag rangeOfComposedCharacterSequenceAtIndex:2])]; 
    long value = [lastget longLongValue]; 
    NSLog(@"findtag: %@", gettag); 
    NSLog(@"lastget: %@", lastget); 

    NSLog(@"%ldvalue",value); 
    if(_checkstate==2){ 
     _checkstate=1; 

     if([sender tag]!= value){ 
      [[subviews objectAtIndex:value] setTitle:_resetbuttonTitle  forState:UIControlStateNormal]; 
      xbutton.backgroundColor = [UIColor whiteColor]; 
     } 
    } 

    NSLog(@"%@dsendertag",_resetbuttonTitle); 
    NSLog(@"%ldsendertag",[sender tag]); 
    NSInteger anIndex=[filteredArray indexOfObject:xbutton]; 
    NSLog(@"%ld : isIndex",anIndex); 
} 

NSLog выход:

 
(
    UIButton: 0x7fdf1a422550; frame = (161 281; 42 42); opaque = NO; tag = 48; layer = <CALayer: 0x600000224ee0>> 
)subarray 
    : searchtag = 48; 
    : searchtag = 54; 
subviews CONTAINS "tag = 48;"predicate 
findtag: 48;" 
lastget: 48 
48value 
48:6dsendertag 
48sendertag 
9223372036854775807 : isIndex 
1checkstate 

Кроме поддельного индекс-вывода весь массив-поиск успешен, но то, что мне действительно нужно индекс.

+0

Что вы здесь делаете? – Adeel

ответ

1

Вы, кажется, пытаетесь использовать NSPredicate, чтобы найти представление внутри массива с его тегом. В этом случае вы делаете это неправильно. Вы должны сделать это вместо:

NSString *search = [NSString stringWithFormat:@"self.tag = %ld", [sender tag]]; 
NSPredicate * predicate = [NSPredicate predicateWithFormat:search]; 
NSArray *filteredArray = [subviews filteredArrayUsingPredicate:predicate]; 

Ссылка: How to filter a NSArray of subviews by tag using NSPredicate?

Также 9223372036854775807 является 0x7FFFFFFFFFFFFFFF в шестнадцатеричном формате, который является беззнаковое -1 в 64-битных переменных, которая является случай NSInteger (длинный целое). Когда indexOfObject: возвращает -1, это потому, что объект не находится в массиве.

В принципе, filterArray не содержит xbutton, так как предикат был выполнен неправильно. Вы можете подтвердить, что путем печати filterArray с NSLog.

+0

: отличное объяснение, вы спасли мой день (или мою кофе-ночь) :-) NSString * search = [NSString stringWithFormat: @ "self.tag =% ld", [sender tag]]; было решением для фильтра фильтров. Теперь я могу сделать: NewArray = [[NSMutableArray alloc] init]; NewArray = [NSMutableArray arrayWithArray: filterArray]; - [[NewArray objectAtIndex: 0] setTitle: _resetbuttonTitle forState: UIControlStateNormal]; xbutton.backgroundColor = [UIColor whiteColor]; [NewArray removeObjectAtIndex: 0]; - если ([NewArray счет] == 0) { ...} прочее если ... - спасибо! – Klaus

 Смежные вопросы

  • Нет связанных вопросов^_^