2014-01-13 17 views
1

我已經有一個使用核心數據通過MagicalRecord的小應用程序,用於學習如何按類別對活動進行分組,並在分組的tableview中顯示數據。因此,我有兩個實體,其中只有一個在這裏使用。它被稱爲ListActivity,並且有兩個屬性,「name」和「category」,都是字符串。iOS MagicalRecord神祕。爲什麼我的數據在truncateAll後重新啓動時重新出現?

拋開困難我已經理解了MR中提供的各種分組和排序方法的工作原理,我添加了一個「TruncateAll」按鈕來簡單地清除平板,以便重新輸入數據。

下面是該按鈕的IBAction爲方法:

- (IBAction)dumpMemory:(UIButton *)sender 
{ 
    [ListActivity MR_truncateAll]; 
    [self refreshData]; 
} 

下面是奇怪的事情:按鈕動作抹的tableview(大概店)乾淨,符合市場預期。但是,如果我通過Xcode中的「停止」按鈕殺死SIM卡,然後重新啓動它,所有數據都將重新出現在表格視圖中。這裏有幾個截圖來說明:

enter image description here

擊中TruncateAll按鈕後:

enter image description here

殺害後,再

輸入數據後重新啓動,數據神祕地重現:

enter image description here

但是,如果我殺死在SIM中的應用:

enter image description here

當重新啓動時,石板是乾淨的:

enter image description here

有人可以用MagicalRecord的經驗告訴我我失蹤了什麼?

謝謝!

編輯:

OK,感謝所有誰回答!大家立即看到我的錯誤。我修改了我的IBAction方法,如下所示:

- (IBAction)dumpMemory:(UIButton *)sender 
{ 
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; 
    [ListActivity MR_truncateAllInContext:localContext]; 
    [localContext MR_saveToPersistentStoreAndWait]; 

    [self refreshData]; 
} 

現在事情完美了!

非常感謝!

+0

你什麼時候保存(調用MR_save的一些變化)? – Travis

回答

1

這種情況在MagicalRecord開發中很常見。通過主要教程,MagicalRecord僅在應用程序放入後臺時保存上下文。因此,如果您在應用程序委託中調用applicationDidEnterBackground方法之前終止了該應用程序,則truncate不會被保存。

從模擬器中刪除應用程序時,將刪除所有應用程序數據。

爲了解決這個問題,請確保您撥打MagicalRecordsave方法選擇適當的地方,如果你只是在測試,它可以在截斷的IBAction所有按鈕。

+0

請參閱編輯。謝謝! – rattletrap99

+0

只是爲了完成,在後臺保存到永久存儲通常是要走的路。 ;) – Legoless

+0

Thanx,會做! – rattletrap99

1

您可能已經忘記了保存託管的對象上下文,以便在應用程序重新啓動時不會保留所做的更改 。

+0

請參閱編輯。謝謝! – rattletrap99

相關問題