2013-02-18 64 views
0

我正在構建具有「清單」功能的應用程序。覈對清單項目存儲爲核心數據實體。在Datamodel中還有一個存儲爲BOOL的'checked'屬性。處理該清單功能的視圖控制器基於UITableViewController如何一次更改Core Data中所有實體的屬性值?

基本上,我想實現UIRefreshControl,它允許用戶重置核心數據中所有檢查列表實體的'checked'狀態。例如,一旦用戶拉下UITableView,所有項目都將被重置並顯示爲「未選中」。

但是,NSFetchedResultsController只能通過[fetchedResultsController objectAtIndexPath:indexPath]一次提供對一個實體的訪問權限。是否有辦法從核心數據中獲取整個實體集合,如NSArrayNSDictionary,因此我可以枚舉所有實體並更改其「checked」屬性?

回答

1

與coverback同意......可以說你想獲取來自名爲「測試」的實體中的所有對象:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" 
              inManagedObjectContext:context]; 
NSError *error; 
[fetchRequest setEntity:entity]; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 

fetchObjects數組包含在「測試」實體

+0

謝謝。我專注於使用NSFetchedResultsController,忘記了可以直接通過managedObjectContext本身獲取所有對象。 – Kann 2013-02-18 14:56:35

+0

然後你可以在數組上調用'makeObjectsPerformSelector:withObject:'。但是如果數組中有很多對象,這可能需要一段時間。 – newenglander 2016-06-03 07:53:06

0

我所有對象需要更新很多實體,因此使用NSFetchRequest的解決方案太慢了。幸運的是,蘋果在iOS中加入8 NSBatchUpdateRequest這裏有一個簡單的例子:

NSBatchUpdateRequest *batchUpdate = [[NSBatchUpdateRequest alloc] initWithEntityName:@"EntityName"]; 
batchUpdate.propertiesToUpdate = @{ @"attribute": @(0) }; 
batchUpdate.resultType = NSBatchDeleteResultTypeStatusOnly; 
[managedObjectContext executeRequest:batchUpdate error:nil]; 

下面是關於這個問題的一個很好的博客文章:https://www.bignerdranch.com/blog/new-in-core-data-and-ios-8-batch-updating/

相關問題