【问题标题】:Invalid Summary on NSMutableArrayNSMutableArray 上的摘要无效
【发布时间】:2011-05-18 09:23:32
【问题描述】:

我需要有关如何解决此问题的专家建议。我正在为 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。

【问题讨论】:

    标签: xcode ipad nsmutablearray nskeyedarchiver cgpoint


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我现在创建另一个数组(arrayToLoad),加载存档文件,然后执行 ballPath = [arrayToLoad mutableCopy];
    猜你喜欢
    • 2011-09-26
    • 2011-07-18
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2016-05-08
    • 2011-10-01
    • 2021-05-17
    • 2018-10-05
    相关资源
    最近更新 更多