2014-07-16 46 views
0

在程序中,我有一個叫做PullLeftMenu.h/.m的類。UIButton添加到子視圖在單獨的類在哪裏存儲方法

ViewController.m我打電話了PullLeftMenu像這樣:

PullLeftMenu *openMenu = [[PullLeftMenu alloc] init]; 
[openMenu classMethodHere]; 

所以,簡單地與運行參數的方法。但是,類PullLeftMenu的這種方法的一部分是將按鈕添加到出現的子視圖。每個按鈕都被分配了自己的方法來調用。舉例來說,按鈕1調用方法btnUsefulStuff

我已經把btnUsefulStuff方法代碼放在PullLeftMenu類和ViewController.m中,並且都沒有被觸發 - 而是導致內存崩潰。

代碼爲PullLeftMenu.m

UIButton *btnUsefulStuff = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnUsefulStuff.frame = CGRectMake(10.0, 180.0, 160.0, 10.0); 
[btnUsefulStuff setTitle:@"Useful Stuff" forState:UIControlStateNormal]; 
[btnUsefulStuff addTarget:self action:@selector(btnUsefulStuff) forControlEvents:UIControlEventTouchUpInside]; 
btnUsefulStuff.titleLabel.font = [UIFont fontWithName:@"KhmerUI" size:16]; 
btnUsefulStuff.titleLabel.textColor = [UIColor colorWithHexString:@"3a589b"]; 
[secondView addSubview:btnUsefulStuff]; 

低於這個按鈕是方法:

-(void)btnUsefulStuff{ 
    NSLog(@"button"); 
} 

問題是,我不知道在哪裏放置方法-(void)btnUsefulStuff因爲無論我把它,它似乎不會被觸發,並且應用程序崩潰並帶有內存警告。錯誤是:

Thread 1: EXC_BAD_ACCESS 
+0

需要...更多... code ...}:{... button目標是什麼? – staticVoidMan

+0

@staticVoidMan嘿對不起我的壞!用應用程序的代碼更新 – Jack4

回答

1

由於這條線[btnUsefulStuff addTarget:self action:@selector(btnUsefulStuff) forControlEvents:UIControlEventTouchUpInside];PullLeftMenu和你說的目標self,這就是你的方法必須是。

我懷疑你的問題是,你已經讓openMenu一個局部變量。將其更改爲ViewController內的強大財產,以便在有人點按按鈕時它仍在內存中。

+0

嗨,謝謝你的評論。出於某種原因,我在'ViewController.h'文件中放置了這段代碼:'@property(strong,nonatomic)PullLeftMenu * openMenu;'我得到錯誤:'未知類型名稱:PullLeftMenu',有什麼你知道的這個錯誤? 'ViewController.h'的頂部是'#import「PullLeftMenu.h」',所以文件肯定存在。 – Jack4

+0

我想嘗試用'@class PullLeftMenu;'替換導入,以防有循環引用。如果這沒有幫助,我需要查看錯誤消息的完整上下文(來自日誌導航器)。 –

+0

對不起,它花了很長時間回覆,一直在嘗試幾件事與你的建議;所以當我在'.m'文件中使用'@ property'時,現在沒有錯誤,當我創建它時,行['openMenu classMethod]'不會運行(NSLog在方法內部)作爲它正在運行的局部變量 - 關於它爲什麼不運行的任何想法? – Jack4

相關問題