Cocoa touch 在NSMutableArray中存储对变量的引用

Cocoa touch 在NSMutableArray中存储对变量的引用,cocoa-touch,uiview,loops,nsmutablearray,Cocoa Touch,Uiview,Loops,Nsmutablearray,我正在寻找一种在NSMutableArray中存储变量引用的方法。由于变量将根据用户选择的内容动态创建,因此我希望能够简单地对该数组进行排序,并获取对这些已创建变量的引用。为了以防万一,我正在创建一个iPhone项目。但是,当我尝试使用以下代码执行此操作时: for (int a = 0; a < 10; a++) { UIView *tempView; [listingOfViews addObject:tempView]; } for (int a = 0; a < [list

我正在寻找一种在NSMutableArray中存储变量引用的方法。由于变量将根据用户选择的内容动态创建,因此我希望能够简单地对该数组进行排序,并获取对这些已创建变量的引用。为了以防万一,我正在创建一个iPhone项目。但是,当我尝试使用以下代码执行此操作时:

for (int a = 0; a < 10; a++)
{
UIView *tempView;
[listingOfViews addObject:tempView];
}

for (int a = 0; a < [listingOfViews count]; a++)
{
[listingOfViews objectAtIndex:a] = defaultViewStructure;
}
for(int a=0;a<10;a++)
{
UIView*临时视图;
[listingOfViews addObject:tempView];
}
对于(int a=0;a<[listingOfViews count];a++)
{
[listingOfViews objectAtIndex:a]=defaultViewStructure;
}
它给了我这个错误:“错误:赋值的左操作数需要左值”

有什么想法吗

编辑:此外,我还收到了以下错误:“错误:请求非结构或联合中的成员“大小”

当我尝试做

for (int a = 0; a < [listingOfViews count]; a++)
{
[listingOfViews objectAtIndex:a].size.height = ...
}
for(int a=0;a<[listingOfViews count];a++)
{
[ListingOffViews objectAtIndex:a].size.height=。。。
}
你的意思是:

[listingOfViews replaceObjectAtIndex:a withObject:defaultViewStructure];
但当您尝试将这些未初始化的tempView指针放入数组时,它会崩溃。你到底想在这里干什么?我想现在是时候回顾一下Objtovi.C的基本原理了。看起来你试图将C++概念直接移植到Objc中,他们做的事情非常不同。
你可能想从开始,然后可能。(后者是基于Mac的,而不是iPhone,但它仍然是最好的起点。)

关于第二个问题:

for (int a = 0; a < [listingOfViews count]; a++)
{
    [listingOfViews objectAtIndex:a].size.height = ...
}

有一些方法可以稍微压缩行数,但您确实需要获取NSRect结构,修改它,然后将其设置回原来的值。在大多数视图中,一次调用不能修改高度。

Hi Rob:我不太想替换对象,只需将对象的值设置为另一个对象的值即可。在不使用NSMutableArray的情况下,这样做很好。此外,上面的代码只是我正在尝试做的一个示例(我的实际代码更长)-在实际情况中,我正在初始化UIView的值。您所说的“设置对象的值”是什么意思?UIView没有值。但是,您确实有一个指向UIView的指针(这是您想要的),因此您可以将数组中的指针替换为指向不同对象的指针,我认为这是您想要的,并且此方法将执行此操作。您将获得指向视图的指针。如果您说[[listingOfViews objectAtIndex:a]setNeedsDisplay],那就行了。但是您期望[listingOfViews objectAtIndex:a]=tempView实际做什么呢?是否要修改数组中的对象(哪个replaceObject:atIndex:does)?或者您是否试图以某种方式修改这行代码中数组之外的内容?当你说“引用”时,你是指C++引用(MyCype &)吗?在Objc中没有这样的事情,这就是为什么我担心你在C++中试图思考而写Objc,这是行不通的。嗨,罗布:抱歉,我没有正确地表达这个意思。所以我会尝试用代码来表达它:“uIVIEW * TunViste= Debug Twitter结构”工作正常。但是,当您试图从数组中获取指向该临时视图的指针时,它会返回该错误。这有意义吗,抱歉,如果它没有…哎呀,转载它来纠正一些事情,就像你发布的那样。。。抱歉。嗨,罗布:谢谢你的回复。但是,即使使用这样的代码:[listingOfViews objectAtIndex:a].center=。。。仍然会产生这种错误。您提供的代码是否会将数组中的指针与更改一起重新保存?点表示法是问题的根源-objectAtIndex:返回一个“id”(一个通用对象指针),因此编译器无法确定如何处理“.center”。如果您按照我上面推荐的方式编写代码,编译器将理解它。我提供的代码不需要“重新保存指针”,指针指向其他对象。它不会改变。调用setFrame时,指向更改的内容:。我会重复我的建议,让你看看我上面列出的书,或者斯坦福iPhone课程,或者其他一些ObjC的基础培训。这些是ObjC的基本概念。
UIView *view = [listingOfViews objectAtIndex:a];
NSRect frame = [view frame];
frame.size.height = ...
[view setFrame:frame];