title: Core data iterate over fetchrequest in chunks with setFetchLimit only processing half the records
body: <p>I am trying to process a lot of objects in chunks of a certain size (batchSize). This loop seems to work, but it processes only half the records. Relevant piece of code is:</p>
  
  <pre><code>{
  //Prepare fetching products without images in the database
  NSFetchRequest * productFetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Product"];
  
  //Sort by last changed photo first
  NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"photoModificationDate" ascending:NO];
  [productFetchRequest setSortDescriptors:@[sortDescriptor]];
  
  NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateString];
  [productFetchRequest setPredicate:predicate];
  
  //First get the total count
  NSUInteger numberOfProducts = [self.backgroundMOC countForFetchRequest: productFetchRequest error: &amp;error];
  NSLog(@"Getting images for: %d products", numberOfProducts);
  
  //Then set the batchsize to get chunks of data
  NSUInteger batchSize = 25;
  [productFetchRequest setFetchBatchSize: batchSize];
  [productFetchRequest setFetchLimit:batchSize];
  
  //Fetch the products in batches
  for (NSUInteger offset = 0; offset &lt; numberOfProducts; offset += batchSize) {
      @autoreleasepool {
          [productFetchRequest setFetchOffset: offset];
          NSArray * products = [self.backgroundMOC executeFetchRequest:productFetchRequest error:&amp;error];
          NSLog(@"Offset: %d, number of products: %d", offset, [products count]);
          if (!products) {
              return NO;
          }
  
          for (Product * product in products) {
              NSLog(@"Downloading photo for product: %@", product.number);
              [self downLoadAndStoreImageForProduct:product];
          }
          [self saveAndResetBackgroundMOC];
      }
  }
  
  return YES;
  </code></pre>
  
  <p>}</p>
  
  <p>The log shows that for the first half of the count (numberOfProducts), it works as expected. So chunks of 25 products are processed. After that first half, the fetchrequest in the loop has 0 records as a result.
  If I retry the same code again, again only half of the (remaining) records is processed, so 3/4 in total.
  What am I doing wrong?
  Note that the managedObjectContext is not only saved, but also reset after the save to save memory. If I do not do this in chunks, the program crashes consistantly after downloading about 3000 pictures.</p>