gpt4 book ai didi

objective-c - 与存储在 NSMutableArray 中的 UIView 进行交互

转载 作者:行者123 更新时间:2023-11-29 05:06:47 27 4
gpt4 key购买 nike

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

我在 NSMutableArray 中存储了三个 UIView

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

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

在 NSLog 中我看到:注册 channel :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;

谢谢大家

最佳答案

我真的很困惑为什么要保存 View 的内存位置?因为这就是您的“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!");
}
}

这就是你想要做的 - 它比较两个指针 - 并且不需要任何整数等的处理。

关于objective-c - 与存储在 NSMutableArray 中的 UIView 进行交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4755507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com