2009-08-26 23 views
0

NSMutableArray内の変数への参照を格納する方法を探しています。変数はユーザーが選択したものに基づいて動的に作成されるため、この配列をソートして、これらの作成された変数への参照を取得することができます。それが重要な場合は、iPhoneプロジェクトを作成しています。しかし、ときに私は、次のコードを使用してこれを行うために試み:「エラー:左辺値割り当ての左オペランドとして必要な」NSMutableArrayの変数への参照の格納

任意のアイデア

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

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

それは私にこのエラーが発生しますか?

EDIT:はまた、私はこのエラーを取得:「エラー:何かない構造体または共用体のメンバの要求 『サイズ』」

私は

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

答えて

0

を行うにしようとすると平均は:

[listingOfViews replaceObjectAtIndex:a withObject:defaultViewStructure]; 

これらの初期化されていないtempViewポインタを配列に配置しようとするとクラッシュします。ここで本当に何をしようとしていますか?私はObjective-Cの基本から出発して出発する時が来るかもしれないと思います。 C++の概念を直接ObjCに移植しようとしているように見えます。

Programming in Objective-Cから始まり、おそらくCocoa Programming for Mac OS Xで始まります。 (後者はむしろiPhoneよりも、Macベースのですが、それはまだ最高の出発点です。)

+0

こんにちは、ロブ: 私はかなりオブジェクトを置き換えたくない、単純にオブジェクトの値を他のオブジェクトの値に設定します。これは、NSMutableArrayを使わないとうまく動作します。さらに、上のコードは単に私がしようとしているものの例です(私の実際のコードはより長いです) - 実際のケースでは、UIViewの値を初期化しています。 – PF1

+0

「オブジェクトの値を設定する」とはどういう意味ですか? UIViewには値がありません。しかし、UIView(これはあなたが望むもの)へのポインタを持っているので、配列内のポインタを別のオブジェクトへのポインタで置き換えることができます。これはあなたが望むものであり、このメソッドは行う。 –

+0

ビューへのポインタを取得しています。 [[listingOfViews objectAtIndex:a] setNeedsDisplay]と言ったら、うまくいくはずです。しかし、あなたは[listingOfViews objectAtIndex:a] = tempViewが実際に何を期待しますか?配列内のオブジェクト(replaceObject:atIndex:does)を変更しますか?あるいは、このコード行で配列の外側の何かを変更しようとしていますか? "references"と言うとC++のリファレンス(MyClass&)のような意味ですか? ObjCにはそのようなことはありません。なぜなら、私はあなたがObjCを書くときにC++で考えようとしているのではないかと心配しています。 –

1

2番目の質問:

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

誤解がここにあります(UIViewのは、-sizeを持っていませんObj-C 2で追加した非常に混乱しているドット表記と、構造体になったときのオブジェクトモデルの不運な内訳のために、実際にはちょっと難しいものと組み合わせられた、サイズを含むフレームを持っています。あなたが何をしようとして行う方法がある:

UIView *view = [listingOfViews objectAtIndex:a]; 
NSRect frame = [view frame]; 
frame.size.height = ... 
[view setFrame:frame]; 

は少し行数を凝縮する方法がありますが、あなたは、NSRect構造体を取り出して、これを変更し、その後、戻ってそれを設定する必要があります。ほとんどのビューでは、1回の呼び出しで高さを変更することはできません。

+0

こんにちはロブ:あなたの返事をありがとう。しかし、[listingOfViews objectAtIndex:a] .center = ...のようなコードを使用しても、そのエラーは発生します。そして、あなたが提供したコードは、変更された配列にあるポインタを再保存しますか? – PF1

+0

ドット表記で問題が発生しています。 -objectAtIndex: 'id'(汎用オブジェクトポインタ)を返します。そのため、コンパイラは ".center"で何をするのか把握できません。上記の方法でコード化すれば、コンパイラはそれを理解します。私が提供したコードは、 "ポインタを再保存する"必要はありません。ポインタが別のものを指しています。それは変わらない。 setFrame:を呼び出すと、変更点が指摘されます。上記の書籍やスタンフォードiPhoneのコース、またはObjCのその他の基本的な訓練を見ることをお勧めします。これらはObjCの基本概念です。 –

関連する問題