2014-01-09 32 views
0

我有兩個類Class1和Class2。 Class2從Class1繼承.Class2包含一個不存在於Class1中的更新方法。調用從超類初始化的子類對象的方法崩潰

我在ios 7中發現了一個崩潰 - [Class1 update]發送給實例的無法識別的選擇器。 這不可重現。 任何人都可以建議我的代碼調用有什麼問題。

+(Class1*)sharedobject{ 
static dispatch_once_t once; 
static Class1 *sharedView; 
dispatch_once(&once,^{ 
sharedView = [[self alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
}); 
return sharedView;} 

Class2: Class1{ 

-(void)update { 
} 
} 

Class2 *obj = [self sharedobject]; 

[obj update];

回答

0

請注意,sharedobject返回Class1的對象。你說update方法只存在於Class2中。然而,你寫了Class2 *obj = [self sharedobject];,然後試圖打電話給update。您已經在Class1中不存在的對象上調用方法。這就是您收到無法識別的選擇器異常的原因。

+0

+(A1 *)sharedView { A1 * sharedView = [super sharedView]; return sharedView; }我是否需要在A2類中重寫類似上面的某些內容以避免運行時異常 – ram