---
title: "fetch(with:merge:)"
framework: appkit
role: symbol
role_heading: Instance Method
path: "appkit/nsobjectcontroller/fetch(with:merge:)"
---

# fetch(with:merge:)

Subclasses should override this method to customize a fetch request, for example to specify fetch limits.

## Declaration

```swift
func fetch(with fetchRequest: NSFetchRequest<any NSFetchRequestResult>?, merge: Bool) throws
```

## Parameters

- `fetchRequest`: The fetch request to use for the fetch. Pass nil to use the default fetch request.
- `merge`: If doc://com.apple.documentation/documentation/Swift/true, the receiver merges the existing content with the fetch result, otherwise the receiver replaces the entire content with the fetch result.

## Discussion

Discussion This method performs a number of actions that you cannot reproduce. To customize this method, you should therefore create your own fetch request and then invoke super’s implementation with the new fetch request. note: In Swift, this method returns Void and is marked with the throws keyword to indicate that it throws an error in cases of failure. You call this method in a try expression and handle any errors in the catch clauses of a do statement, as described in Error Handling in The Swift Programming Language and About Imported Cocoa Error Parameters.

## See Also

### Core Data support

- [entityName](appkit/nsobjectcontroller/entityname.md)
- [fetch(_:)](appkit/nsobjectcontroller/fetch(_:).md)
- [usesLazyFetching](appkit/nsobjectcontroller/useslazyfetching.md)
- [defaultFetchRequest()](appkit/nsobjectcontroller/defaultfetchrequest().md)
- [fetchPredicate](appkit/nsobjectcontroller/fetchpredicate.md)
- [managedObjectContext](appkit/nsobjectcontroller/managedobjectcontext.md)
