一个大的菜鸟需要帮助理解事物。
我有三个UIViews存储在NSMutableArray
中lanes = [[NSMutableArray arrayWithCapacity:3] retain];
- (void)registerLane:(Lane*)lane {
NSLog (@"registering lane:%i",lane);
[lanes addObject:lane];
}
在NSLog中我看到:注册lane:89183264
NSLog(89183264)中显示的值就是我所追求的。 我希望能够将该数字保存在变量中,以便能够在代码中的其他位置重用它。
我能想出的最接近的是:
NSString *lane0 = [lanes objectAtIndex:0];
NSString *description0 = [lane0 description];
NSLog (@"description0:%@",description0);
问题是description0获取整个UIView对象,而不仅仅是单个数字(dec 89183264是hex 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;
谢谢大家
答案 0 :(得分:1)
我真的很困惑为什么要保存视图的内存位置?因为这就是你的'89183264'号码。它是指针的位置。当你打电话时:
NSLog (@"registering lane:%i",lane);
......你知道那里的实际印刷品是什么吗?打印的数字是什么意思?
这似乎是一个非常糟糕的主意,特别是如果你是UIView的子类,你已经有了一个可爱的.tag属性,你可以指定你选择的int。
你使生活变得无比复杂。只需使用指针。假设我有一个包含许多UIViews的数组:
UIView *viewToCompare = [myArray objectAtIndex:3];
for (id object in myArray) {
if (object == viewToCompare) {
NSLog(@"Found it!");
}
}
这就是你要做的事情 - 它比较了两个指针 - 并且不需要对整数等进行任何调整。