如何通过Cocoa Touch中的变量赋值遍历类层次结构?

时间:2009-04-24 16:36:03

标签: cocoa-touch

我创建了一个名为MyViewController的UIViewController类,其XIB文件中包含UIImageView。然后我将这个类导入另一个类。我创建了一个类的实例,并使用代码更改了UIImageView中的图像:

myViewController.myImageView.image = [UIImage imageNamed:@"myImage.png"];

这很有效。我的应用基本上是一个图像查看器。我想通过使用图像预加载子视图来缓存下一个和上一个图像。当我将myViewController放入这样的变量时:

UIViewController *pager = myViewController;

并尝试使用该变量为UIImageView设置图像,如下所示:

pager.myImageView.image = [UIImage imageNamed:@"myImage.png"];

我得到一个“错误:请求成员'myImageView'的东西不是结构或联合”。我尝试过使用方括号:

[[[pager myImageView] setImage:[UIImage imageNamed:@"myImage.png"]];

我得到“警告”UIViewController'可能无法响应'-myImageView'“。如何访问层次结构以访问myImageView?我在头文件和#import中使用了@class,我合成了类实例。到目前为止,唯一的解决方案就是黑客攻击:

UIImageView *pager = myViewController.myImageView;
pager.image = [UIImage imageNamed:@"myImage.png"];

我的变量数量加倍,一个用于UIImageView变量,另一个用于UIViewController变量。提前感谢任何可以提供帮助的人。

1 个答案:

答案 0 :(得分:1)

快速回答

您需要更改一行:

UIViewController *pager = myViewController;

为:

MyViewController *pager = myViewController;

能够访问您在MyViewController课程中添加的自定义属性。

<强>解释

你的MyViewController类可能看起来像这样(简化):

// MyViewController.h:
@interface MyViewController : UIViewController
{
    UIImageView * myImageView;
}
@property (readonly) UIImageView * myImageView;
@end

// MyViewController.m:
@implementation MyViewController
@synthesize myImageView;
@end

通过向原始类添加成员变量和属性(UIViewController),扩展 myImageView类。

当您使用指向基类(UIViewController)的指针来访问您的变量时,您告诉编译器将该变量视为普通旧UIViewController,并且是一个普通的变量UIViewController没有myImageView的概念。这是导致编译器错误的原因。