我有一個按鈕可以從類中的數組觸發隨機聲音。我有一個IBAction觸發的視圖控制器的懶惰實例,但我覺得這是不正確的,因爲兩個原因:視圖控制器中的懶惰實例化
1)我通常看到人們在做L.I.在獲取者和設定者。
當我嘗試做L.I.在getter/setter中,我的程序崩潰了,我不知道爲什麼。
2)我視圖控制器IBAction爲的內部執行該延遲實例。
這是做懶惰實例化的正確方法嗎?
這裏是不會崩潰的代碼:
- (IBAction)myClass:(UIButton *)sender
{
if (!self.myClass){
self.myClass = [[myClass alloc] init];
[self.myClass setUpMyClass]; // this method just loads sounds and some text
}
[self.myClass playSound];
self.myClassLabel.text = [[NSString alloc] initWithFormat:@"%@", [self.myClass someText]];
}
這裏是崩潰的代碼:
- (myClass *)myClass
{
if (!self.myClass){
self.myClass = [[myClass alloc] init];
[self.myClass setUpMyClass]; // this method just loads sounds and some text
}
return self.myClass;
}
- (IBAction)myClass:(UIButton *)sender
{
[self.myClass playSound];
self.myClassLabel.text = [[NSString alloc] initWithFormat:@"%@", [self.myClass someText]];
}
該出把在調試器沒有說太多,但有一個綠色箭頭旁邊說
-(myClass *) myClass {
它說
Thread 1: EXC_BAD_ACCESS (code=2, address =0xbf7ffffc)
用戶名爲AQUA,該方法setUpMyMethod看起來是這樣的:
-(void) setUpEscha{
self.eschaDialogue = [[NSArray alloc] initWithObjects:
[[NSBundle mainBundle] pathForResource:@"Sound1" ofType:@"mp3"],
[[NSBundle mainBundle] pathForResource:@"Sound1" ofType:@"mp3"],
...
nil];
self.eschaLines = [[NSArray alloc] initWithObjects:
@"String1",
@"String2",
@"...",
nil];
}
你的代碼看起來很好。但是,如果你想要任何真正的幫助,你需要更新你的問題與關於崩潰的確切細節。包含錯誤和堆棧跟蹤。 – rmaddy 2013-03-08 04:26:46
你可以提供調試器的信息,或者顯示'setUpMyClass'的代碼嗎? – aqua 2013-03-08 04:27:08
注意:最後一行應該是:'self.myClassLabel.text = [self.myClass someText];'。這假設'[self.myClass someText]'返回一個'NSString'。 – rmaddy 2013-03-08 04:28:10