2015-08-14 10 views
1

我可以用什麼策略來解決這種情況?如何對核心數據對象進行分組,以便全部或全部被系統刪除?

我有一個視圖控制器,顯示在特定的一天發生的所有事件。

事件通過首先嚐試獲取對象填充到viewWillAppear中。如果沒有找到對象,那麼它會使用Web服務請求那天的事件。

如果用戶想要去第二天,他們可以點擊「第二天」按鈕。像viewWillAppear一樣,此按鈕嘗試獲取,如果未返回任何結果,則會觸及Web服務。

問題:如果用戶多次點擊「第二天」,然後返回到第一天,那麼獲取將不會返回任何對象,或者更糟糕的是,它只會返回當天的一些對象。

這給用戶的印象是,他們正在查看當天事件的完整列表,實際上它只是部分事件。

我的理論是對可以創建的核心數據對象的可用內存空間存在某種限制,因此它會取消分配較舊的內存空間。這可能嗎?

如何編寫我的事件視圖控制器,以便iOS可以刪除特定日期的所有對象或保留當天的所有對象並刪除另一天?

+3

這聽起來更像是你的代碼中有一些邏輯錯誤。您可能想要發佈您用於獲取和顯示數據的代碼。如果您使用正確的委託方法使用NSFetchedResultsController和UITableView,則應始終查看正確的數據。點擊「Next Day」應該簡單地在你的fetchedResultsController查詢中應用一個過濾器來返回那一天的數據子集,或者如果沒有可以調用後臺任務來加載數據的話。 –

+2

你的理論不正確。核心數據永遠不會釋放對象。最糟糕的情況是這些物體會變成缺陷。如果你下一次從你的代碼中訪問它們,它們將被轉回到非故障對象。這會自動發生。 –

回答

0

@DuncanGroenwald和@MatthiasBauch在這種情況下都是正確的。

應用程序邏輯錯誤,因爲Web服務提取的事件正在重複EventID,因此在一週中的某一天具有相同的ID。

例如,也許EventID 1-4在週一,週五,週五5-7,週三......等等。當創建任何兩個同一天的時候,比如說8月15日(星期六)和8月22日(星期六),第一天(8月15日)的活動將被刪除,因爲EventIDs是相同的。

所以我真的不知道這個事實,我原來的假設是我內存不足是錯誤的。我很明顯地打了「第二天」,最終我得到了同樣的評論。

我的解決辦法是讓EVENTID唯一通過添加日期:

originalEventID 日期 = originalEventID(12345)+ 日期(08152015)

所以eventDateID == 1234508152015

我還必須創建不同的訪問器方法來與具有特定的originalEventID vs內部eventDateID的Web服務交談。

現在的應用程序保持所有的事件,我可以停止指責iOS!

相關問題