1

我需要一些关于如何解决这个问题的专家建议。我正在为 iPad 的新应用程序做一些粗略的测试。

通过加载在另一个应用程序中创建的 plist 文件,我在视图控制器的 viewDidLoad 中创建了一个 NSMutableArray (ballPath)(它在我的 .h 文件中声明)。

ballPath = [[NSMutableArray alloc] initWithCapacity:1000];

NSString *path=[[NSBundle mainBundle] pathForResource:@"level_1" ofType:@"plist"];

ballPath = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

该数组现在包含许多 CGPoints(由其他应用程序存储为 NSValues 并存档)。

在此处输入图像描述

然后我绘制路径(仍在我的 viewDidLoad 中),它工作正常,所以路径应该工作正常。

当我稍后想要读取数组作为对加速度变化的响应时,我得到一个 EXC_BAD_ACCESS。当我调试并查看我的数组时,它看起来像这样:

在此处输入图像描述

我测试并用这个替换加载的数组(也在 viewDidLoad 中):

    ballPath = [[NSMutableArray alloc] initWithObjects:
            [NSValue valueWithCGPoint:CGPointMake(100.0, 100.0)],
            [NSValue valueWithCGPoint:CGPointMake(100.0, 200.0)],
            [NSValue valueWithCGPoint:CGPointMake(100.0, 300.0)],
            [NSValue valueWithCGPoint:CGPointMake(100.0, 400.0)],
            [NSValue valueWithCGPoint:CGPointMake(125.0, 450.0)],
            [NSValue valueWithCGPoint:CGPointMake(150.0, 500.0)],
            [NSValue valueWithCGPoint:CGPointMake(300.0, 600.0)],
            [NSValue valueWithCGPoint:CGPointMake(350.0, 550.0)],nil];

然后它工作得很好!

在此处输入图像描述

我在这里想念什么???

我在 Xcode 4.0.2 上,我的目标是 iOS 4.3。

4

1 回答 1

1

数组在此时被释放,因此数组之前所在的位置有一些随机内存。

unarchiveObjectWithFile:返回一个自动释放的对象,如果要保留数组,则需要保留它(或使其成为保留属性)。前面两行的 alloc-init 完全是多余的(并且可能会泄漏内存),因为您永远不会对在那里创建的数组做任何事情,它会被您从包中加载的数组替换。

于 2011-05-18T10:43:23.353 回答