1

长话短说,我在一些我正在弄乱的代码中有一些奇怪的错误,事实证明它来自一个被识别为错误类的对象。

这是我的代码,我在任何接触对象之前放置了 NSLog 语句......我无法弄清楚为什么它显示为错误的类。

照片.h

@interface Photo : NSObject
{
}

@property (nonatomic, retain) UIImage *image;
@property (nonatomic, retain) IBOutlet NSString *descr;

@end

照片.m

@implementation Photo

@synthesize image;
@synthesize descr;

@end

CameraViewController.h

#include "Photo.h"

@interface CameraViewController : UIViewController <UIImagePickerControllerDelegate>
{
    IBOutlet UIImageView *imageView;
}

@property (nonatomic, retain) Photo *photo;

-(void)takePhoto;
-(void)resetImage;

@end

最后... CameraViewController.m

#import "Photo.h"
....

@implementation CameraViewController

@synthesize photo;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%@", NSStringFromClass([_photo class]));
    // Do any additional setup after loading the view.
}

这打印出来:

UIImageView

我希望它打印出来

Photo

或者至少

NSObject

我错过了什么吗???

4

1 回答 1

2

向对象发送class消息会检索该对象的动态类型。必须先分配对象,然后再查询它的class. 换句话说,将属性声明为Photo*不足以使其class返回Photo:您还必须为其分配一个实例Photo或其子类之一。在后一种情况下,发送class消息的结果会有所不同(即Class返回子类的)。

于 2012-09-21T14:59:11.733 回答