我正在尝试使用工厂模型样式创建具有多个图像的模型。我有一个处理个体的类,一个处理个体组的类和一个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应用程序完成的
答案 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中不是好的类名。 individualsClass
和Flock
可能是更好的名字。
令人困惑的是,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];