Objective-C:类之间的图像管理

时间:2011-10-29 19:38:35

标签: objective-c image ipad nsmutablearray

我正在尝试使用工厂模型样式创建具有多个图像的模型。我有一个处理个体的类,一个处理个体组的类和一个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];

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应用程序完成的

2 个答案:

答案 0 :(得分:1)

目前还不清楚你要做什么,但你肯定会做很多你不需要的东西。请考虑以下代码行:

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

第一行声明了一个名为tempFlock的{​​{1}}类型的变量。然后,它会创建并初始化一个空NSMutableArray *并将其分配给NSMutableArray。然后第二行将tempFlock分配给newFlock.theFlock,覆盖您在第一行中创建的数组的唯一引用。你可以这样说:

tempFlock

无论如何,最后一个块的正确语法是:

NSMutableArray *tempFlock = newFlock.theFlock;

所以也许这就是你想要做的事情:

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

此外,[self.view addSubview:[flock.theFlock objectAtIndex:1].individualImage]; flock在Objective-C中不是好的类名。 individualsClassFlock可能是更好的名字。

令人困惑的是,Individual个实例有一个名为flock的属性。看起来theFlock只是一个人的数组,因此该属性的更好名称可能是theFlock

答案 1 :(得分: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];