2011-10-29 24 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,現在我試圖使個人跟蹤自己的形象的。所以我把

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]; 

在一個單獨的類,然後試圖從我的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]; 

我也試了一下沒有所有的複製,但點符號開始得到的方式,因爲我在訪問一個NSMutableArray對象的屬性(這似乎荒謬很難在客觀C)。我也可以用一些幫助來計算出這一點

即。

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

我是一種新的客觀C,所以也許我攻擊這個問題是錯誤的。這是爲iPad應用程序完成的

回答

1

目前還不清楚你想要做什麼,但是你絕對要做很多你不需要的東西。考慮你的代碼的這些行:

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

第一行聲明瞭一個名爲NSMutableArray *類型的tempFlock變量。然後它創建並初始化一個空的NSMutableArray並將其分配給tempFlock。第二行然後將newFlock.theFlock指定爲tempFlock,覆蓋您在第一行中創建的數組的唯一引用。你可以這樣說:

NSMutableArray *tempFlock = newFlock.theFlock; 

反正你最後一塊正確的語法是這樣的:

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

因此,也許這就是你想要做什麼:

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

而且,flockindividualsClass在Objective-C中不是很好的類名。 FlockIndividual可能是更好的名稱。

令人困惑的是,flock實例有一個名爲theFlock的屬性。它看起來像theFlock只是一個個人的陣列,所以更好的名稱可能是individuals

+0

我也想強調,重要的是要堅持命名約定,這意味着類名應始終以大寫字母開頭。使用ARC時,這些約定部分成爲強制執行的規則。但是,即使沒有ARC,在使用與其他人相同的約定時,也會讓您的生活以及其他人的代碼更加輕鬆。 – DarkDust

0

如果所有的「點」語法導致理解問題而不使用它們,它們只是方法調用的替代語法。

[myInstance value]與myInstance.value相同,可以將其視爲簡單替換。

也避免長複合語句可以幫助理解,而不是使用一個或多箇中間命名變量。相信編譯器會優化它們。

所以,@rob寫道:

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

等價可能是:

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

分成多個語句:

tempFlock = [[flock theFlock] objectAtIndex:1]; 
tempIndividual = [tempFlock individualImage]; 
image = [tempIndividual image];