1 //獲取ObjectModel至關於獲取Core Date文件 2 NSManagedObjectModel *model = self.coreDataStack.contenxt.persistentStoreCoordinator.managedObjectModel; 3 self.fetchRequest = [model fetchRequestTemplateForName:@"FetchRequest"]; 4 self.venues = [self.coreDataStack.contenxt executeFetchRequest:self.fetchRequest error:nil];
1 @property (nonatomic, strong) NSFetchRequest *fetchRequest; 2 @property (nonatomic, strong) NSAsynchronousFetchRequest *asyncFetchRequest; 3 4 //asyncFetch只是對普通request的封裝 5 self.fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Venue"]; 6 self.asyncFetchRequest = [[NSAsynchronousFetchRequest alloc] initWithFetchRequest:self.fetchRequest completionBlock:^(NSAsynchronousFetchResult * _Nonnull result) { 7 self.venues = result.finalResult; 8 [self.tableView reloadData]; 9 }]; 10 //注意調用的是executeRequest:方法 11 [self.coreDataStack.contenxt executeRequest:self.asyncFetchRequest error:nil];
Batch Updates或Batch Deletes與普通NSFetchRequest
請求不一樣的是,他們都基於NSPersistentStoreRequest
類,這是直接對底層的NSPersistentStore
進行數據操做的請求,而不通過NSManagedObjectContext
,所以避免將固態存儲的數據轉移到內存再處理的過程,所以效率大大提高。異步
1 //設置批處理請求,包含更新的內容,影響的stores 2 NSBatchUpdateRequest *batchUpdate = [NSBatchUpdateRequest batchUpdateRequestWithEntityName:@"Venue"]; 3 batchUpdate.propertiesToUpdate = @{@"favorite":@YES}; 4 batchUpdate.affectedStores = self.coreDataStack.contenxt.persistentStoreCoordinator.persistentStores; 5 batchUpdate.resultType = NSUpdatedObjectsCountResultType;//返回更新的行數 6 7 NSBatchUpdateResult *batchResult = [self.coreDataStack.contenxt executeRequest:batchUpdate error:nil]; 8 NSLog(@"%@", batchResult.result); 9 //在iOS9中又新增