如何检查两个对象(UIButtons)是否相同

KIN*_*ING 3 tags uibutton uitableview ios

首先关闭标签不会工作.我这样说是因为我创建了4个按钮,它们都具有特定单元格的相同标签,即indexPath.row = tag.

在我的TableViewCellForRowAtIndexpath中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"courseCell";

//Step 1: Check to se if we can reuse a cell from a row that has just rolled off the screen
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//step 2: If there are no cell to reuse, create a new one
if (cell == nil){
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
...


    //-------------Creation of Custom Buttons-------------// 

    //-----img = "radioOn.png"-----//
    //----img2 = "radioOff.png"----//

    //----RadioButtonA----//
    ...

    radioButtonA = [UIButton buttonWithType:UIButtonTypeCustom];

    [radioButtonA addTarget:self action:@selector(radioButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    radioButtonA.tag=indexPath.row;

    //----End RadioButtonA----//

    //----RadioButtonB----//

    radioButtonB = [UIButton buttonWithType:UIButtonTypeCustom];
    [radioButtonB addTarget:self action:@selector(radioButtonClicked:)forControlEvents:UIControlEventTouchUpInside];
   radioButtonB.tag =indexPath.row;
...

    //----End RadioButtonB----//

    //----RadioButtonC----//

    radioButtonC = [UIButton buttonWithType:UIButtonTypeCustom];
    [radioButtonC addTarget:self action:@selector(radioButtonClicked:)forControlEvents:UIControlEventTouchUpInside];
    radioButtonC.tag = indexPath.row;
...

    //----End RadioButtonC----//

    //----RadioButtonNA----//

    radioButtonNA = [UIButton buttonWithType:UIButtonTypeCustom];
    radioButtonNA.tag = indexPath.row;
    [radioButtonNA addTarget:self action:@selector(radioButtonClicked:)forControlEvents:UIControlEventTouchUpInside];

    ...

    //----End RadioButtonC----//

    //---------End of Radio Button Creations---------//

    //---------UIStepper & StepperLabel Creation-----//




    [cell.contentView addSubview:radioButtonA];
    [cell.contentView addSubview:radioButtonB];
    [cell.contentView addSubview:radioButtonC];
    [cell.contentView addSubview:radioButtonNA];

//Step4: Return the cell
return cell;
}

#pragma mark - Buttons

- (void)radioButtonClicked:(UIButton *)sender
 {

UIButton *myButton = sender;


// This Method and all the ones similar to this method is created to handle the UITouchUpInsideEvent that the user sends when pressing the radioButtons A-NA.

[radioButtons addObject:sender];

// Create an instance(object) of class NSIndexPath called indexPath and set its value the indexPath of the cell the user is currently in.
UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *indexPath = [myTableView indexPathForCell:cell];


// Initialize two unique variables in order to check if the buttons being clicked are being referenced in the correct index. 
int row = indexPath.row;
NSLog(@"Button is in row %d", row);

...

}

-(IBAction)button:(UIButton*)sender{
  ...
@try {
    for (i=0; i<8; i++) {

        if ([credits count ] ==0) {
            break; 
        }
Run Code Online (Sandbox Code Playgroud)

这是我试图访问我在我的单元格中创建的单选按钮的地方.我想做的就是这个

if([credits objectAtIndex:i])== radioButtonA {

做东西.我不说== [radioButtonA标签]的原因是因为我有三个其他按钮都具有相同的标签.如果你读了代码,你就会明白为什么用这种方式设置标签.}

我要求的是1个帮助,2是另一种方法来检查两个按钮即对象是否相等而不必依赖它们的标签.

不要担心Try catch最后我用它来捕获被抛出的异常.

        if ([[[[credits objectAtIndex:i]titleLabel]text] isEqualToString:@"A"])  {
            NSLog(@"radioA is in array");
            creditHours+=[[valueArray objectAtIndex:i]doubleValue];
            gradeEarned+=(GradeA.doubleValue *[[valueArray objectAtIndex:i]doubleValue]);
            NSLog(@"%f",gradeEarned);
            continue;
        }

        if ([[[[credits objectAtIndex:i]titleLabel]text] isEqualToString:@"B"]) {
            NSLog(@"radioB is in array");
            creditHours+=[[valueArray objectAtIndex:i]doubleValue];
            gradeEarned+=(GradeB.doubleValue *[[valueArray objectAtIndex:i]doubleValue]);
            continue;
        }

        if ([[[[credits objectAtIndex:i]titleLabel]text] isEqualToString:@"C"]){
            NSLog(@"radioC is in array");
            creditHours+=[[valueArray objectAtIndex:i]doubleValue];
            gradeEarned+=(GradeC.doubleValue *[[valueArray objectAtIndex:i]doubleValue]);
            continue;
        }

        if([credits objectAtIndex:i]== radioButtonNA){
            NSLog(@"boboboobbobob");
            continue;
        }
    }
}
@catch (NSException *exception) {
    NSLog(@"NSException Caught");
    NSLog(@"Name: %@",exception.name);
    NSLog(@"Reason: %@", exception.reason);
}
@finally {
    NSLog(@"in finally block");
}

//        if ([credits objectAtIndex: i] == defaulter) {
//                        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Failed to select all grades" message:[NSString stringWithFormat:@"Your grade selections have been reset"] delegate:self cancelButtonTitle:@"great"otherButtonTitles:nil];
//                        [alert show];
//                        [alert release];
//            [self refreshArray];
//        }


NSLog(@"%f",gradeEarned);

if (gradeEarned == 0) {
    textLabel.text= [NSString stringWithFormat:@"%f",gradeEarned];
}else {
    NSLog( @"boob");
    sum= (gradeEarned)/(creditHours);
    NSLog(@"%f",sum);
    textLabel.text= [NSString stringWithFormat:@"%f",sum];
    //[self refreshArray];
}

}
Run Code Online (Sandbox Code Playgroud)

更多信息这是日志...
NSLog(@"%@",[credits objectAtIndex:i]); 的NSLog(@ "%@",radioButtonA);

      THE First output is the log of the [credits object atIndex:i]  
Run Code Online (Sandbox Code Playgroud)

UIButton:0x6c91430; frame =(86 110; 32 30); opaque = NO; layer = CALayer:0x6c914f0

2012-06-20 20:24:01.568 TableView [12557:f803] UIButton:0x6ea8ad0; frame =(86 110; 32 30); opaque = NO; tag = 6; layer = CALayer:0x6e746e0

正如您所看到的,UIBUttons是不同的,因此==运算符不起作用

Lad*_*lav 5

当检查两个对象时,你不能使用==,你必须使用[objectA isEqual:objectB],如果这两个对象是相同的,答案将是YES,如果不是,则为NO.

要了解更多信息,请访问:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html

并检查为isEqual写的是什么: