Obtención de la ID máxima de los datos centrales y sqlite

Tengo una tabla de usuarios y tengo un montón de columnas en el model de datos del núcleo. Una de las columnas es user_id y estoy intentando get el id_usuario más alto y agregar + 1 a él y pasarlo al siguiente object que se insertá. Seguí la guía del desarrollador de Apple e implementé como se sugirió. Aquí está el código que estoy tratando de ejecutar.

El problema es: el valor de my account_id que se está devolviendo se establece en un número extraño que ni siquiera existe en la database.

"account_id" = 139784529; Se supone que es 1, ya que solo he guardado en datos centrales.

NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Users" inManagedObjectContext:self._managedObjectContext]; [request setEntity:entity]; // Specify that the request should return dictionaries. [request setResultType:NSDictionaryResultType]; // Create an expression for the key path. NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"account_id"]; // Create an expression to represent the function you want to apply NSExpression *expression = [NSExpression expressionForFunction:@"max:" arguments:@[keyPathExpression]]; // Create an expression description using the minExpression and returning a date. NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init]; // The name is the key that will be used in the dictionary for the return value. [expressionDescription setName:@"maxAccountId"]; [expressionDescription setExpression:expression]; [expressionDescription setExpressionResultType:NSInteger32AttributeType]; // For example, NSDateAttributeType // Set the request's properties to fetch just the property represented by the expressions. [request setPropertiesToFetch:@[expressionDescription]]; // Execute the fetch. NSError *error; NSArray *objects = [self._managedObjectContext executeFetchRequest:request error:&error]; if (objects == nil) { // Handle the error. } else { if ([objects count] > 0) { nextAccountId = [[[objects objectAtIndex:0] valueForKey:@"maxAccountId"] integerValue]; } } } @catch (NSException *exception) { NSLog(@"%@",[exception reason]); } return nextAccountId + 1; 

Espero que alguien haya enfrentado este problema antes y lo haya solucionado.

Gracias

    Gracias a todos por echar un vistazo a la pregunta. También gracias por los comentarios y respuestas. Después de descifrar el problema al ver la database sqlite desde el terminal, noté que la tabla estaba dañada y me devolvía todos los valores basura. El problema fue muy simple. Esto es lo que he hecho para solucionarlo.

    1. Se eliminó la aplicación del iPhone Simulator.
    2. Solución limpia
    3. Re comstackdo el progtwig. Lo ejecuté, y bam … funcionó.

    Solo un consejo para desarrolladores para aquellos que no sabían cómo acceder a sqlite desde la terminal .

    1. Calcule la location de su sqlite. Por lo general / Usuario / Nombre de usuario / Biblioteca / Soporte de aplicaciones / iPhone Simulator / 6.1 / xxxxxxxxxx / Documentos cd a este directory.

    2. escriba el command sqlite3

    3. adjunte "Application.sqlite" como db1

    4. bam … ejecuta tus commands.

    5. Si desea ver las bases de datos que se ejecutan dentro de – tipo .database

    Gracias a todos de nuevo.

    Este código funciona bien para mí después de eliminar el código try / catch y simplificó la instrucción if después de la request de recuperación a esto:

     if ([objects count] > 0) { nextAccountId = [[[objects objectAtIndex:0] valueForKey:@"maxAccountId"] integerValue]; } else { nextAccountId = 0; } 

    Si eso no lo soluciona, confirme que tiene el context de object gestionado inicial correcto ( self._managedObjectContext vs. self.managedObjectContext según cómo lo definió) y los nombres de entidad / atributo son correctos.