obj-c 无法从搜索数组中找到索引/错误输出

obj-c cannot find index from searched array / wrong output

无论我在任何组合中做什么,NSLog 总是 returns 成功搜索的数组对象的错误索引号。

代码:

-(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;帧 = (161 281; 42 42);不透明 = 否;标记 = 48;层 = >
)子数组
  : 搜索标签 = 48;
  : 搜索标签 = 54;
 子视图包含 "tag = 48;" 谓词
找到标签:48;“
 上次:48
 48值
 48:6dsendertag
 48发件人标签
 9223372036854775807 : isIndex
 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在十六进制中是0x7FFFFFFFFFFFFFFFF,是-1在64位变量中的无符号表示,就是NSInteger(long int)的情况。当indexOfObject: returns -1时,那是因为对象不在数组中。

基本上,filteredArray 不包含 xbutton,因为谓词执行不正确。您可以通过使用 NSLog 打印 filteredArray 来确认。