2012-01-18 83 views
0

我正在嘗試設置一個撤消組,該組包含泛手勢識別器期間發生的所有更改。被修改的對象是來自核心數據的NSManagedObjects。使用核心數據撤消運行循環中的循環

當手勢進入「開始」階段時,代碼啓動一個撤銷組並關閉按事件分組。在「結束」和「取消」階段,組結束並按事件分組。

在識別器的每個「更改」上,都會更新同一個核心數據對象。隨後,Core Data將爲該特定更改創建一個新的撤消組。

有沒有什麼辦法可以讓核心數據停止?或者我需要改變在這種情況下如何處理撤銷?

我有一個示例項目here在BBQMainViewController.m的handlePanGesture:方法(第82行)中有相關的代碼。該項目在識別器的每次更新時向控制檯輸出撤消堆棧。正如你所看到的,撤消堆棧的構建和構建。如果您註釋掉第168行,撤消堆棧不會建立。

回答

0

事實證明,我看到的問題實際上是由於我正在處理的應用程序不能正確更新撤消後的UI。

手勢開始時創建一個撤銷組,然後在結束或取消狀態下關閉它包裝核心數據在識別器更改狀態更新期間創建的所有撤消組。在撤銷管理器上撤銷的調用撤消了整個組,包括由Core Data創建的嵌套組。

總之:用戶錯誤。照常。

0

既然你通過手勢識別週期修改同一NSManagedObject每一次(當然,最終else子句中無論如何),爲什麼不緩存值和UIGestureRecognizerStateEnded設置對象的值只是一次?

這可能是(我不是尚未足夠的核心數據專家的肯定知道),其核心數據是爲每一個變化(圖中的至少相同的對象)明確地創建一個新的撤銷組級別不管你的setGroupsByEvent:設置。

+0

我相信Core Data會根據我的測試合併同一個運行循環中的所有更改。這個樣本已經從實際的項目中解決了很多問題。每次更改都會有更多更新,並更新UI,然後還需要Core Data更改。 – 2012-01-18 19:14:36