Espressione NSDictionaryResultType che non tiene conto degli oggetti appena inseriti

StackOverflow https://stackoverflow.com/questions/1632029

  •  06-07-2019
  •  | 
  •  

Domanda

Voglio il valore massimo di un campo nei dati di base, quindi ho impostato la seguente richiesta:

// Create fetch
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context]];
[fetch setResultType:NSDictionaryResultType];

// Expression for Max ID
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"myNumbericID"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"maxID"];
[expressionDescription setExpression:minExpression]; 
[expressionDescription setExpressionResultType:NSDoubleAttributeType];
[fetch setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

// Execute the fetch. 
double theID = 0;
NSError *error;
NSArray *objects = [context executeFetchRequest:fetch error:&error]; 
if (objects && [objects count] > 0) { 
    theID = [((NSNumber *)[[objects objectAtIndex:0] valueForKey:@"maxID"]) doubleValue];
}

Tuttavia sembrerebbe che non stia prendendo in considerazione alcun nuovo oggetto che è stato inserito nel contesto in precedenza. È così che dovrebbe funzionare? Funziona solo su oggetti nel negozio?

Non riesco a trovare alcun riferimento ad esso nei documenti.

Grazie,

Mike

È stato utile?

Soluzione

Ho ricevuto una risposta dai forum degli sviluppatori Apple ed è stato confermato che non tiene conto delle modifiche non salvate.

Altri suggerimenti

Questo comportamento è documentato (male) in [NSFetchRequest setIncludePendingChanges:]. Un valore di YES non è supportato con NSDictionaryResultType. Ciò significa che non è possibile utilizzare NSExpressionDescription su modifiche non salvate.

Cordiali saluti, è possibile saltare l'intera sezione NSExpression e proseguire con il recupero, quindi utilizzare gli operatori di raccolta per il valore massimo.

theID = [objects valueForKeyPath:"@max.myNumbericID"];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top