我创建了一个名为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变量。提前感谢任何可以提供帮助的人。
答案 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
的概念。这是导致编译器错误的原因。