1

非常に長い話ですが、私がいじっているコードにいくつかの奇妙なバグがあり、それは間違ったクラスとして識別されているオブジェクトに起因していることがわかりました。

これが私のコードです。何かがオブジェクトに触れる前にNSLogステートメントを配置しています...なぜそれが間違ったクラスとして表示されているのか理解できません。

Photo.h

@interface Photo : NSObject
{
}

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

@end

Photo.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を取得します。オブジェクトをクエリする前に、オブジェクトを割り当てる必要があります。言い換えると、プロパティを返すには不十分であると宣言します。また、そのサブクラスのインスタンスまたは1つを割り当てる必要があります。後者の場合、メッセージの送信結果は異なります(つまり、サブクラスの結果が返されます)。classPhoto*classPhotoPhotoclassClass

于 2012-09-21T14:59:11.733 に答える