Iphone 与大数字打交道

Iphone 与大数字打交道,iphone,objective-c,ios,Iphone,Objective C,Ios,我有一个像1234567891011213这样的数字,我需要将它从一个方法(cellForRow)传递到另一个方法(button action方法)。我使用的最简单的方法是通过按钮标签传递它。在这种情况下,这是不可能的(?)。我也可以为它创建一个属性,但是封装呢?我想知道这样做的真正正确(最好是简单)的方法。提前谢谢 实际上,您可以将该值附加到ui按钮。当您具有要传递的值并且有对按钮的引用时: static char kMyObject; objc_setAssociatedObject(my

我有一个像1234567891011213这样的数字,我需要将它从一个方法(cellForRow)传递到另一个方法(button action方法)。我使用的最简单的方法是通过按钮标签传递它。在这种情况下,这是不可能的(?)。我也可以为它创建一个属性,但是封装呢?我想知道这样做的真正正确(最好是简单)的方法。提前谢谢

实际上,您可以将该值附加到
ui按钮
。当您具有要传递的值并且有对按钮的引用时:

static char kMyObject;

objc_setAssociatedObject(myButton, &kMyObject, [NSNumber numberWithInt:myInt], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
UITableViewCell *cell = nil;
for (UIView *view = sender; view; view = view.superview) {
    if ([view isKindOfClass:[UITableViewCell class]]) {
        cell = (UITableViewCell *)view;
        break;
    }
}
另一方面,当您收到按钮id为的操作时:

- (void)myAction:(id)sender
{
   UIButton *myButton = (UIButton*)sender;
   NSNumber *number=objec_getAssociatedOject(myButton,&kMyObject);
}

在这个整数标记中,您可以存储指向类/结构/任何表示bigint的内容的指针(32位地址的情况)

例如:

UIButton *button = [UIButton ...];
button.tag = (int)[[MyBigInt alloc] initWithString:@"12131312312312312"];
之后:

MyBigInt *bigInt = (MyBigInt *)button.tag;
...
[bigInt release];

正如Saad所说,您不能将其作为标签传递。你可以在这里用。
@Saad不能使用double,因为它将失去精度

这里我要做一些假设,因为我刚刚经历了一些类似的事情

  • 带有操作的UIButton位于UITableViewCell中
  • 所有数据都有一个底层源(即一个包含所有数据的数组)
  • 您可以轻松访问tableView
  • 首先,您需要获取包含按钮的单元格:

    static char kMyObject;
    
    objc_setAssociatedObject(myButton, &kMyObject, [NSNumber numberWithInt:myInt], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    UITableViewCell *cell = nil;
    for (UIView *view = sender; view; view = view.superview) {
        if ([view isKindOfClass:[UITableViewCell class]]) {
            cell = (UITableViewCell *)view;
            break;
        }
    }
    
    接下来,需要获取该单元格的indexRow:

    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    
    最后,您必须访问您的数据:

    ModelClass modelObject* obj = [self.data objectAtIndex:indexPath.row];
    

    现在,您可以对模型进行任何更改。

    @Stas我只是想解释一下如何传递值。你如何实际填充你的细胞,如何组织数字,取决于你…谢谢,我根本不明白你在做什么。)我会试试。objc_setAssociatedObject是C函数还是什么?检查这个:在
    UIButton
    上创建一个类别,将对
    objc_setAssociatedObject()
    objec_GetAssociatedObject()
    的调用用属性包装起来。很抱歉,这不是那么简单,但据我所知,这是从表视图单元中访问模型的正确方法。我为UIView创建了一个类别,它有一个方法cellSuperview来完成第一部分。然后,我在控制器中创建了一个方法-objectForSender:,这样我就不必为每个操作编写代码。