我有一个按钮,可以从类的数组中触发随机声音。我在视图控制器中使用了延迟实例化,它由IBAction触发,但我感觉这是不正确的,因为有两个原因:
1)通常我看到人们在getter和setter中进行L.I.。
当我尝试在getter/setter中进行L.I.时,我的程序会崩溃,我不知道为什么。
2)我正在执行这个延迟实例化,在视图控制器的IBAction中。
这样做延迟实例化的方式是否正确?
以下是不会崩溃的代码:
调试器中的输出并没有提供太多信息,但是在一行代码旁边有一个绿色箭头。
1)通常我看到人们在getter和setter中进行L.I.。
当我尝试在getter/setter中进行L.I.时,我的程序会崩溃,我不知道为什么。
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];
}
self.myClassLabel.text = [self.myClass someText];
。这假设[self.myClass someText]
返回一个NSString
。 - rmaddy