从类中的按钮访问方法?

时间:2010-05-29 14:37:47

标签: iphone objective-c uibutton

#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的一个循环中调用display,而id喜欢改变buttonPressed中的一些GameObjects实例变量。还想通过调用buttonPressed中的一些其他方法来改变其他一些东西,但我认为这将是我的问题中的较小一部分;)

哦,顺便说一下:我做了所有的程序化!所以这个没有界面构建器。

还想知道我如何将一些变量传递给buttonPressed方法......无法在任何地方找到它:(对此的帮助将非常感激;)

感谢 FLO

1 个答案:

答案 0 :(得分:2)

由于内存管理问题,您的应用程序崩溃了。

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

+buttonWithType:方法不是+alloc / -copy / +new方法,因此返回值为-autorelease d。但GameObject将成为此按钮的所有者。因此,您应该-retain

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

(当然,-release中的-dealloc。)