【问题标题】:Objective-C: Image Management between classesObjective-C:类之间的图像管理
【发布时间】:2011-10-29 19:38:35
【问题描述】:

我正在尝试以工厂模型样式创建具有多个图像的模型。我有一个处理个人的类,一个处理个人组的类和一个 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 应用程序完成的

【问题讨论】:

    标签: objective-c image ipad nsmutablearray


    【解决方案1】:

    不清楚你想要做什么,但你肯定做了很多你不需要做的事情。考虑一下您的代码的这些行:

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

    第一行声明了一个名为tempFlock 的变量NSMutableArray *。然后它创建并初始化一个空的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

    【讨论】:

    • 我还想强调,坚持命名约定很重要,这意味着类名应始终以大写字符开头。使用 ARC 时,这些约定部分成为强制执行的规则。但即使没有 ARC,在使用与其他人相同的约定时,您和使用您的代码的其他人的生活也会变得更轻松。
    【解决方案2】:

    如果所有“点”语法都导致了理解问题,请不要使用它们,它们只是方法调用的替代语法。

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

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 2010-12-29
      • 1970-01-01
      • 2011-09-27
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多