2012-02-29 105 views
0

我有一些代码,我实现撤消功能,所述撤销功能如下:阵列,存储器管理

- (void) undo 
{ 
    drawImage.image = pathArray.lastObject; 
    [pathArray removeLastObject]; 
} 

然后我还有一个功能来捕获从屏幕的当前图像;在这个功能我对这个

[pathArray removeLastObjectatIndex:0];

的功能没有其他的呼叫在这部分程序制作得到EXC_BAD_ACCESS错误。也许可能有移动整个数组的问题,但我不想使用撤消管理器。

有没有更好的方法来获取数组的最后一个对象,然后删除第一个对象并将整个数组移动一个?

注意:路径列是MutableArray *patharray; 感谢所有=)

我只是没有和想法如何解决这个!我在官方文档中找不到任何解决方案。

+0

我想你在这里有几个问题,但我不确定。 1)你得到一个EXEC_BAD_ACCESS试图使用你的数组,你有可能没有一个强大的数组引用,它已被释放。 2)你想对阵列中的物品做些什么?听起来像是一个堆栈,你想在哪里弹出最前面的项目。 – rooftop 2012-02-29 19:43:36

+0

是的,我有5个对象。它显示了这个错误不良访问......并且对此有另一个好奇心。我第一次使用它,好吧,第二次使用它,好吧,但是如果我第三次调用它,应用程序在BAD ACCESS ERROR上崩溃... :( – 2012-02-29 19:48:32

+0

看起来像你的内存已损坏。已经发布了,但是你保留了一个指向它的指针,参见http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html或者关于调试的类似文章EXC_BAD_ACCESS – Sam 2012-02-29 19:48:37

回答

1

最终,这个程序不可能是可达 - 它意味着在许多情况下没有什么可以“撤消”,并且不应该给出选项。你的问题通常最终位于上游。

如果这里是并非完全如此,这里是一个办法:

- (void)undo 
{ 
    if (0 == self.pathArray.count) { 
    self.drawImage.image = nil; 
    return; 
    } 

    self.drawImage.image = self.pathArray.lastObject; 
    [self.pathArray removeLastObject]; 
} 

同时,[pathArray removeLastObjectatIndex:];是不是一个真正的选择。

更新

见我的回答here启用和发现的僵尸,并找到引用计数迅速弥补。你的程序不应该给僵尸留言。

+0

我试过这个,但它不起作用,目前我在我的程序中有这个,但我的应用程序落在这个 - [pathArray removeLastObjectatIndex:0]; – 2012-02-29 19:56:54

+1

@RadimHalfar我补充说: “[pathArray removeLastObjectatIndex:];不是真正的选择器” – justin 2012-02-29 20:06:32

+0

对不起,我的意思是这个[pathArray removeObjectAtIndex:0]; – 2012-02-29 23:00:50