2011-05-18 52 views
1

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

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

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

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

ballPath = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

此数组现在包含许多CGPoint(由另一个应用程序存储为NSValues和存档)。

enter image description here

然后我绘制的路径(依然在我的viewDidLoad),其工作正常,所以路径应正常工作。

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

enter image description here

我测试以及与此替换装阵列(也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]; 

然后它工作得很好!

enter image description here

缺少什么我在这里????

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

回答

1

该数组在此时被释放,以便在数组之前存在一些随机存储器。

unarchiveObjectWithFile:返回一个自动释放对象,如果你想保留数组,你需要保留它(或使它成为一个保留属性)。之前的alloc-init两行是完全多余的(可能会泄漏内存),因为你从来没有对你在那里创建的数组做任何事情,它是从你从bundle中加载的数组中取代取代

+0

谢谢!我现在创建另一个数组(arrayToLoad),加载存档文件,然后执行ballPath = [arrayToLoad mutableCopy]; – Structurer 2011-05-18 10:59:09