2010-05-29 68 views
0
#import "GameObject.h" 
#import "Definitions.h" 

@implementation GameObject 

@synthesize owner; 
@synthesize state; 
@synthesize mirrored; 

@synthesize button; 

@synthesize switcher; 


- (id) init { 
if (self = [super init]) { 
    [self setOwner: EmptyField]; 

    button = [UIButton buttonWithType:UIButtonTypeCustom]; 

    [self setSwitcher: FALSE]; 
    } 
return self; 
} 
- (UIButton*) display{ 
button.frame = CGRectMake(0, 0, GO_Width, GO_Height); 
[button setBackgroundImage:[UIImage imageNamed:BlueStone] forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(buttonPressed:) 
    forControlEvents:UIControlEventTouchUpInside]; 

return button; 
} 


-(void)buttonPressed:(id) sender { 
//... 
} 
} 

- (void) dealloc { 
[super dealloc]; 
} 

@end 

嗨!從類中的按鈕訪問方法?

我想知道如果上述是可能以某種方式在一個類(在我的情況下,它被稱爲GameObject),或者如果我必須有按鈕調用viewcontroller中的方法...上述結果與應用程序崩潰。

我會在viewcontroller和id中的一個循環內調用display來改變buttonPressed中的一些GameObjects實例變量。也id喜歡通過調用buttonPressed內的其他一些方法來改變一些其他的東西,但我認爲這將是我的問題中較小的;)

哦,順便說一句:我做的所有programmaticaly!所以這個沒有界面生成器。

也是我想知道我怎麼可以通過一些變量的buttonPressed方法...不能找到它的任何地方:(在這一個幫助會非常讚賞;)

感謝 FLO

回答

2

你由於內存管理問題,應用程序崩潰。

button = [UIButton buttonWithType:UIButtonTypeCustom]; // wrong 

+buttonWithType:方法不是+alloc/-copy/+new方法,因此,返回值將是-autorelease d。但GameObject將成爲此按鈕的所有者。所以,你應該-retain吧。

button = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; // correct 

(當然,-release-dealloc

+0

的人......這就是這些「捂臉」之一-moments 太感謝你了!你保存了我的一天/週末/月;) thankyouthankyouthankyou;) – zwadl 2010-05-29 15:10:28

+0

哦,並將更多的變量傳遞給buttonPressed函數? – zwadl 2010-05-29 15:11:16

+0

@flo:什麼變量?一個按鈕的目標動作只能得到2個參數,發件人和事件。如果您需要自定義變量,請將其作爲GameObject的ivar。 – kennytm 2010-05-29 15:19:26