2012-09-21 67 views
1

很長的故事總結,我有一些代碼中的一些奇怪的錯誤,我搞砸了,事實證明它來自一個被識別爲錯誤類的對象。iOS對象被識別爲錯誤的類

這裏是我的代碼,在我觸及對象之前放置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 

難道我失去了一些東西???

+1

你在哪裏分配控制器的.photo屬性? – highlycaffeinated

+1

如果您尚未分配照片,爲什麼會打印照片? – dasblinkenlight

+0

你永遠不會定義這個變量....(你沒有一個名爲「_photo」的變量,除非上面的代碼錯誤) – borrrden

回答

2

發送一個對象class消息檢索該對象的動態類型。該對象必須在查詢class之前進行分配。換句話說,聲明一個屬性爲Photo*不足以使其class返回Photo:還必須爲其分配一個Photo或其某個子類的實例。在後面的情況下,發送class消息的結果將不同(即將返回子類的Class)。

+0

謝謝......我認爲綜合基本上做到了。我將代碼更改爲alloc和init,現在工作正常。 –

相關問題