2016-10-22 65 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的情況下(長INT)。當indexOfObject:返回-1時,這是因爲該對象不在數組中。

基本上,由於謂詞做得不正確,filteredArray不包含xbutton。您可以通過使用NSLog打印filteredArray來確認。

+0

:優秀的解釋,你節省了我的一天(或我的咖啡夜):-) NSString * search = [NSString stringWithFormat:@「self.tag =%ld」,[sender tag]]; 是filteredArray的解決方案。 現在我可以這樣做:NewArray = [[NSMutableArray alloc] init]; NewArray = [NSMutableArray arrayWithArray:filteredArray]; - [[NewArray objectAtIndex:0] setTitle:_resetbuttonTitle forState:UIControlStateNormal]; xbutton.backgroundColor = [UIColor whiteColor]; [NewArray removeObjectAtIndex:0]; - if([NewArray count] == 0){ ...} else if ... - 謝謝! – Klaus

相關問題