0

我很难处理数组。来自 AS2/AS3 和垃圾收集对我来说是新的...... ;)

这不是完整的代码,只是重要的部分。

.h-file
@interface HelperViewController : UIViewController {
    NSMutableArray *pagesNumbers;
}
@property (nonatomic, retain) NSMutableArray *pagesNumbers;

.m-file
@synthesize pagesNumbers;
-(void)loadView {
    pagesNumbers = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], nil];
    NSLog(@"pagesNumbers: %@", pagesNumbers); // WORKS!
}
-(void)changePage:(id)sender {
    NSLog(@"pagesNumbers: %@", pagesNumbers); // PROBLEM*
}

上面的问题*是,它在 viewDidLoad 调用该函数时起作用,但是当它稍后被 UIButton 调用时使用此(非常有用的)消息时会崩溃:

[会话开始于 2009-08-25 11:12:51 +0200。] GNU gdb 6.3.50-20050815(Apple 版本 gdb-966)(2009 年 3 月 10 日星期二 02:43:13 UTC)版权所有 2004 自由软件基金会, Inc. GDB 是自由软件,受 GNU 通用公共许可证保护,欢迎您在特定条件下更改和/或分发它的副本。键入“显示复制”以查看条件。GDB 绝对没有任何保证。键入“显示保修”以获取详细信息。此 GDB 配置为“i386-apple-darwin”。sharedlibrary apply-load-rules all 附加到进程 13197。

有人可以帮忙吗?

问候,埃里克。

4

1 回答 1

2

看起来 pagesNumbers 没有被保留。

尝试添加:

[pagesNumbers retain];

在 loadview 中初始化数组之后。

我相信 arrayWithObjects 会返回一个自动释放的数组,所以如果你以后想使用它,你需要明确地保留它。

编辑,刚刚注意到 pagesNumbers 也是一个属性。您正在直接初始化 pagesNumbers ,因此不会调用合成的 setter(并且不会自动保留)。如果你想使用属性设置器,我相信你需要使用self来引用pagesNumbers,即

self.pagesNumbers = [NSMutableArray arrayWithObjects.....
于 2009-08-25T09:23:37.503 回答