2012-02-29 107 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