UIScrollView自定义ViewController

时间:2011-11-06 20:04:36

标签: ios uiscrollview exc-bad-access viewcontroller

我有一个奇怪的情况。我希望用户通过单击UIScrollView中的按钮来选择类别。这是页面视图控制器的相关代码(包含用IB制作的UIScrollView的代码):

- (void)viewDidLoad
{
    [super viewDidLoad];

    uiScroll.contentSize = CGSizeMake([[SawData shared].categories count]*320,480);
    int i = 0;
    for (NSString* key in [SawData shared].categories) {
        Baton *b = [[Baton alloc] initWithNibName:@"Baton" bundle:nil];
        b.view.frame = CGRectMake(i++*320, 0, 320, 480);
        [uiScroll addSubview:b.view];
        [b release];
    }
}

Baton是新的UIViewController子类,只包含一个带有touchUp动作的按钮,可以使用NSLog打印一些日志信息。通过这段代码,我可以将警棍正确排列在一起。问题是单击按钮会释放EXC_BAD_ACCESS,因为Batons视图控制器已被释放。

如果我删除[b发布];第一行,由于i ++ * 320给出了相同的结果(我检查过并且正确),因此我将警棍重叠在一起。在这种情况下,单击按钮正在工作。

谢谢你的帮助!

iOS SDK 4.3

编辑1: 经过多次试验和错误,我已经设法找出发生了什么。它的320px宽度的控件。如果我将它们更改为321或319,则所有工作都应该如此。我不需要释放控制器来图像填充UIScrollView内容并单击按钮工作。这到底是什么意思?

1 个答案:

答案 0 :(得分:0)

这可能是原因。

Baton *b = [[Baton alloc] initWithNibName:@"Baton" bundle:nil] autorelease];

您还应确保在单击之前初始化UIButton。您可以使用调试器轻松完成此操作。

看看这里

Does UIView's addSubview really retain the view?