【问题标题】:Working with big numbers处理大数字
【发布时间】:2012-05-11 12:14:14
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    您实际上可以将值附加到UIButton。当你有你想要传递的值并且你有一个对按钮的引用时:

    static char kMyObject;
    
    objc_setAssociatedObject(myButton, &kMyObject, [NSNumber numberWithInt:myInt], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    

    另一方面,当您收到按钮为 id 的操作时:

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

    【讨论】:

    • @Stas 我只是解释如何传递值。如何实际填充单元格以及如何组织数字取决于您...
    • 谢谢,我只是不明白你在做什么)))我会试试的。 objc_setAssociatedObject 是某个 C 函数,还是什么?
    • UIButton 上创建一个类别,以使用属性包装对objc_setAssociatedObject()objec_getAssociatedOject() 的调用。
    【解决方案2】:

    你不能像 Saad 所说的那样将它作为标签传递。你可以在这里使用NSDecimal numbers 。 @Saad 不能使用双精度,因为它会失去精度。

    【讨论】:

      【解决方案3】:

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

      例如:

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

      之后:

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

      【讨论】:

        【解决方案4】:

        我将在这里做一些假设,因为我只是在经历类似的事情时。

        1. 带有操作的 UIButton 位于 UITableViewCell 中。
        2. 您的所有数据都有一个基础来源(即一个包含所有数据的数组)。
        3. 您可以轻松访问您的 tableView。

        首先,您需要获取包含按钮的单元格:

        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];
        

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

        【讨论】:

        • 抱歉没那么简单,但据我所知,这是从表格视图单元格中访问模型的正确方法。我为 UIView 创建了一个类别,它有一个方法 -cellSuperview 来完成第一部分。然后我在控制器中创建了一个方法 -objectForSender: 这样我就不必为每个操作编写该代码。
        猜你喜欢
        • 2016-06-19
        • 1970-01-01
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        相关资源
        最近更新 更多