【问题标题】:interacting with UIViews stored inside a NSMutableArray与存储在 NSMutableArray 中的 UIView 交互
【发布时间】:2011-01-21 04:51:25
【问题描述】:

一个大菜鸟需要帮助理解事物。

我在 NSMutableArray 中存储了三个 UIView

lanes = [[NSMutableArray arrayWithCapacity:3] retain];

- (void)registerLane:(Lane*)lane {  
    NSLog (@"registering lane:%i",lane);
    [lanes addObject:lane];
}

在我看到的 NSLog 中:注册通道:89183264

NSLog (89183264) 中显示的值是我所追求的。 我希望能够将该数字保存在一个变量中,以便能够在代码的其他地方重用它。

我能想到的最接近的是:

NSString *lane0 = [lanes objectAtIndex:0];
NSString *description0 = [lane0 description];
NSLog (@"description0:%@",description0);

问题是 description0 获取整个 UIView 对象,而不仅仅是单个数字(dec 89183264 是十六进制 0x550d420)

description0 的内容:

description0:<Lane: 0x550d420; frame = (127 0; 66 460); alpha = 0.5; opaque = NO; autoresize = RM+BM; tag = 2; layer = <CALayer: 0x550d350>>

我不明白为什么我使用 NSLog 如此容易地获得正确的十进制值,但似乎无法以任何其他方式将其从 NSMutableArray 中取出。我确信我在这里遗漏了一些“基本知识”,如果有人能花时间解释这里发生了什么,我将不胜感激,这样我终于可以继续前进了。学习了一天。

为什么我不能通过以下方式轻松保存 89183264 号码:

NSInteger * mylane = lane.id;
or  
NSInteger * mylane = lane;

谢谢大家

【问题讨论】:

    标签: objective-c ios uiview nsmutablearray nsobject


    【解决方案1】:

    我真的很困惑为什么要保存视图的内存位置?因为这就是您的“89183264”号码。它是指针的位置。当你打电话时:

    NSLog (@"registering lane:%i",lane);
    

    ...您知道实际打印的内容吗?打印的数字是什么意思?

    这似乎是一个非常糟糕的主意,尤其是当您将 UIView 子类化时,您已经有了一个可爱的 .tag 属性,您可以分配一个您选择的 int。

    你让生活变得比它需要的复杂得多。只需使用指针。假设我有一个包含大量 UIView 的数组:

    UIView *viewToCompare = [myArray objectAtIndex:3];
    for (id object in myArray) {
        if (object == viewToCompare) {
            NSLog(@"Found it!");
        }
    }
    

    这就是你想要做的 - 它比较两个指针 - 并且不需要任何与整数等有关的东西。

    【讨论】:

    • 我试图以某种方式识别 UIView,然后在代码中比较它是否相同。当我做 NSLog (@"registring lane:%i",lane);我在 NSLog 输出中得到 89183264。对我来说,这是一个唯一的数字,它告诉我它是哪个 UIView。我也分配了 .tag 。那么我将如何将 .tag 值保存在变量中呢?比内存位置值容易吗?
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2010-12-14
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多