继承另一个类的方法

时间:2012-05-30 19:56:35

标签: objective-c class inheritance

我构建了一个包含多个类的应用程序。其中一个名为“photoItem”的类,该类包含一个图像项和一个方法。

我尝试在appDelagate中使用该方法,但它无效。

我的photoitem.h是:  #import

@interface photoItem : NSObject
 {
     UIImage *imageView;
     NSString *photoNameLabel;
     NSString *photographerNameLabel;
     UIButton *viewPhoto;
 }
 @property(readonly) NSString *name;
 @property(readonly) NSString *nameOfPhotographer;
 @property(readonly) UIImage *imageItem;

 -(id)makePhotoItemWIthPhoto:(UIImage*)image name:(NSString*)photoName photographer:   (NSString*)photographerName;

@end

这是我的photoitem.m:

#import "photoItem.h"

@implementation photoItem

@synthesize name;
@synthesize nameOfPhotographer;
@synthesize imageItem;

-(id)makePhotoItemWIthPhoto:(UIImage*)image name:(NSString*)photoName photographer:(NSString*)photographerName
{
    [self setName:photoName];
    [self setNameOfPhotographer:photographerName];
    [self setImageItem:image];
    return self;
}

-(void) setName:(NSString *)name
{
    photoNameLabel = name;
}  

-(void) setNameOfPhotographer:(NSString *)nameOfPhotographer
{
    photographerNameLabel = nameOfPhotographer;
}

-(void)setImageItem:(UIImage *)imageItem
{
    imageView = imageItem;
}
@end

我的appdelagate是:

 #import "AppDelegate.h"
 #import "PersonListViewController.h"
 #import "RecentsViewController.h"
 #import "PhotoListViewController.h"
 #import "photoItem.h"

 @implementation AppDelegate

 @synthesize window = _window;

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     // Override point for customization after application launch.

     photoArray = [[NSMutableArray alloc] init];
    [photoArray addObject:[photoItem XXXXXX];

}

我想在最后一行实现该方法:[photoArray addObject:[photoItem XXXXXX]但是xcode并没有让我选择并使用这种方法。

问题是什么?

1 个答案:

答案 0 :(得分:1)

正如您的代码现在所示,由于以下原因,它无法运行: 1.您的photoArray需要作为属性列出并合成 2.您还没有分配/初始化一个photoItem。

在界面(.h)中执行以下操作:

@property(nonatomic,strong) NSMutableArray *photoArray;

在@implementation指令之后的实现(.m)中,在@synthesize窗口之前或之后执行此操作:

 @synthesize photoArray;

此外,您应该首先使用一组大写字母命名类,以便您(和其他人)可以快速区分类和类的实例。您可以在公司名称或姓名前加上前缀。例如,如果您的名字是John Smith,则可以将类命名为JSPhotoItem。代码看起来像这样:

 photoArray = [[NSMutableArray alloc] init];
 JSPhotoItem *photoItem=[JSPhotoItem alloc] init];
  // perform any other initialization of the photoItem object

 [photoArray addObject:photoItem];
祝你好运

Ť