2011-10-29 17 views
0

工場モデルスタイルで複数の画像を含むモデルを作成しようとしています。私は個人を扱うクラスと、個人のグループを扱うクラスとViewControllerを持っています。 Objective-C:クラス間の画像管理

testImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)]; 
testImage.image = [UIImage imageNamed:@"myImage.png"]; 
testImage.animationDuration = 1.5; 
testImage.contentMode = UIViewContentModeCenter; 
[self.view addSubview:testImage]; 

http://jcdeveloperworld.blogspot.com/2009/07/iphone-game-tutorial-part-1.html

- おかげ

それだけのViewControllerであり、そして今私は、個人が自分のイメージを追跡しようとしていたときにこのコードが動作します。だから私は別のクラスの

を入れて、私のviewControllerからそれを表示しようとしました。 viewControllerに別のクラスのものを表示するように指示することはできません。

flock *newFlock = [[flock alloc] init]; 
[newFlock makeFlock]; 


NSMutableArray *tempFlock = [[NSMutableArray alloc] init]; 
tempFlock = newFlock.theFlock; 

individualsClass *tempIndividual = [[individualsClass alloc] init]; 
tempIndividual = [tempFlock objectAtIndex:0]; 

UIImageView *tempImage = [[UIImageView alloc] initWithFrame:CGRectMake(250, 500, 30, 30)]; 

tempImage = tempIndividual.individualImage; 

[self.view addSubview:tempImage]; 

私はまた、すべてのコピーせずにそれを試してみましたが、私は(客観Cでばかばかしいほど難しいと思われる)NSMutableArrayの中のオブジェクトのプロパティにアクセスしていますので、ドット表記は邪魔になるし始めました。私はそれを理解するのに助けを借りることができます

ie。

flock.[theFlock.individualImage.image objectAtIndex:1] //Doesn't work 

私は客観的なCの新機能ですので、おそらく私はこの問題を間違って攻撃しています。これはiPadアプリのために行われています

答えて

1

あなたがしようとしていることは明らかではありませんが、あなたは間違いなく多くのことをする必要はありません。あなたのコードのこれらの行を考えてみましょう:

NSMutableArray *tempFlock = [[NSMutableArray alloc] init]; 
tempFlock = newFlock.theFlock; 

最初の行は、タイプNSMutableArray *tempFlockという名前の変数を宣言します。次に、空のNSMutableArrayを作成して初期化し、tempFlockに割り当てます。 2行目はnewFlock.theFlocktempFlockに割り当て、最初の行で作成した配列への参照のみを上書きします。あなたはこれを言うことができます:とにかく

NSMutableArray *tempFlock = newFlock.theFlock; 

、あなたの最後のブロックの正しい構文は以下です:また

[self.view addSubview:[flock.theFlock objectAtIndex:1].individualImage]; 

[flock.theFlock objectAtIndex:1].individualImage.image 

だから多分これはあなたが何をしたいです、 flockおよび individualsClassは、Objective-Cではクラス名が正しくありません。 FlockIndividualの方が良いかもしれません。

flockインスタンスにはtheFlockという名前のプロパティが混乱しています。 theFlockは個人の配列なので、プロパティのより良い名前はおそらくindividualsです。

+0

私もそれが重要だと強調したいです命名規則に固執しています。つまり、クラス名は常に大文字で始める必要があります。 ARCを使用する場合、これらの規則は部分的に強制される規則になります。しかし、ARCがなくても、他の人と同じ慣習で作業するときは、あなたの人生とあなたのコードを扱う他の人々の人生を楽にします。 – DarkDust

0

すべての「ドット」構文が理解に問題を引き起こしているだけで、それらを使用しないと、メソッド呼び出しの代わりの構文に過ぎません。

[myInstance value]は、単純な代替として表示できるmyInstance.valueと同じです。

また、複合語を長く記述することを避けると、理解に役立ち、代わりに1つ以上の中間的な名前の変数を使用することができます。それらを最適化するためにコンパイラを信頼してください。

ので、@robは書いているよう:

[flock.theFlock objectAtIndex:1].individualImage.image 

は同等は次のようになります。

[[[[flock theFlock] objectAtIndex:1] individualImage] image] 

は、複数の文に分割:

tempFlock = [[flock theFlock] objectAtIndex:1]; 
tempIndividual = [tempFlock individualImage]; 
image = [tempIndividual image]; 
関連する問題