Estoy tratando de recuperar un objeto único de mi coredatabase, sin embargo, se mantiene devolver null. Mi método se basa en otro método que devuelve todos los valores de la coredata objeto que estoy acceder a..

Nunca he intentado esto antes y he intentado leer las manzanas de los documentos, no sólo de su sentido.. esto es lo que mi método se parece a

- (NSMutableArray *)readSelectedInstall:(NSString *)projIDString {
    NSManagedObjectContext *context = [self managedObjectContext];

    if (context == nil) {
        NSLog(@"Nil");
    }
    else {


        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"InstallProject" inManagedObjectContext:context];
        [fetchRequest setEntity:entity];

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ProjID==%@", projIDString];
        [fetchRequest setPredicate:predicate];

        NSError *error;

        NSMutableArray *installProjectDictionaryArray = [[NSMutableArray alloc] init];


        NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
        for (InstallProject *installProj in fetchedObjects) {

            NSMutableDictionary *tempInstallProjectDictionaryArray = [[ NSMutableDictionary alloc] init];

            [tempInstallProjectDictionaryArray setObject:installProj.companyName forKey:@"CompanyName"];
            [tempInstallProjectDictionaryArray setObject:installProj.projNo forKey:@"ProjNo"];
            [tempInstallProjectDictionaryArray setObject:installProj.projID forKey:@"ProjID"];

            [installProjectDictionaryArray addObject:tempInstallProjectDictionaryArray];
        }

        return installProjectDictionaryArray;
    }
    return nil;
}

cualquier ayuda que me devuelva un único elemento que eso es projID coincide con el projIDString sería muy apreciada.

Es context == nil? O ¿executeFetchRequest volver nil? En el último caso, ¿cuál es el valor de error?
resulta que yo no era la asignación de mi CoredataManagins clase.. lo he hecho y ahora estoy recibir las copias de visionado un error. «La terminación de la aplicación debido a uncaught exception ‘NSInvalidArgumentException’, la razón: ‘no implementadas generación de SQL para predicado : (CUALQUIER ProjID CONTIENE[cd] «10000085»)'»
«CUALQUIER ProjID CONTIENE[cd] …», no es el predicado que nos has mostrado en tu pregunta …
Huy.. he usado el error de la respuesta a continuación. esto es lo que mi código de arriba genera. «*** Terminación de la aplicación debido a uncaught exception ‘NSInvalidArgumentException’, la razón: ‘ruta de acceso clave ProjID no se encuentra en la entidad <NSSQLEntity InstallProject id=2>'»
Eso significa que usted no definir un atributo «ProjID» para el centro de Datos de la entidad «InstallProject». Quizás un pequeño error tipográfico?

OriginalEl autor HurkNburkS | 2013-10-16

2 Comentarios

  1. 17

    Importación de NSManagedObject(InstallProject) y recuperar un objeto como este,

    -(InstallProject *)readSelectedInstall:(NSString *)projIDString
    {
    
        NSArray *fetchedObjects;
        NSManagedObjectContext *context = [self managedObjectContext];
        NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
        NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"InstallProject"  inManagedObjectContext: context];
        [fetch setEntity:entityDescription];
        [fetch setPredicate:[NSPredicate predicateWithFormat:@"(ANY ProjID contains[cd] %@)",projIDString]];
        NSError * error = nil;
        fetchedObjects = [context executeFetchRequest:fetch error:&error];
    
        if([fetchedObjects count] == 1)
        return [fetchedObjects objectAtIndex:0];
        else
        return nil;  
    
    }
    bueno, descubrió que no era initalising mi coredatamanaging clase y después de hacerlo, esto es lo que el código devuelto «la Terminación de la aplicación debido a uncaught exception ‘NSInvalidArgumentException’, la razón: ‘no implementadas generación de SQL para predicado : (CUALQUIER ProjID CONTIENE[cd] «10000085»)'»
    bien directamente utilice [NSPredicate predicateWithFormat:@»ProjID==%@», projIDString] o intentar, [NSPredicate predicateWithFormat:@»ProjID CONTIENE %@»,nombre]];
    Se debe reemplazar el CASO de los DEMÁS en la final y simplemente volver [fetchedObjects firstObject]. Si no hay un objeto en la matriz, devuelve nil.

    OriginalEl autor karthika

  2. 12

    ¿Qué acerca de la fetchLimit en el fetchRequest puede establecer que a 1

    La captura límite especifica el número máximo de objetos que una solicitud debe devolver cuando se ejecuta.

    Por ejemplo. En Swift :

    let fetchRequest = NSFetchRequest(entityName: "Cart")
    fetchRequest.fetchLimit = 1
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

    Edición: La sortDescriptors se establecen sólo porque yo estaba usando este fetchRequest con un NFRC, usted puede simplemente ejecutar la fetchRequest demasiado :

    do {
      let fetchRequest = NSFetchRequest(entityName: "Cart")
      fetchRequest.fetchLimit = 1
      fetchRequest.predicate = NSPredicate(format: "name == %@", mainCart)
      var objects: [Cart]
      try objects = mainMoc.executeFetchRequest(fetchRequest) as! [Cart]
    } catch {
    
    }

    OriginalEl autor JohnVanDijk

Dejar respuesta

Please enter your comment!
Please enter your name here