2011-05-13 16 views
6

Podría tener mi terminología incorrecta en el título usando la palabra singleton. Estoy buscando una buena técnica ahora. Tengo una entidad llamada usuario que almacena los usuarios que han iniciado sesión en los datos, como una clave de sesión para realizar solicitudes de servidor. Solo quiero que una de estas entidades exista alguna vez. ¿Hay una técnica estándar para hacer esto?Entidad Singleton en CoreData

Lo que tengo hasta ahora es algo como esto

NSManagedObjectContext *moc = [self managedObjectContext]; 
    NSEntityDescription *entityDescription = [NSEntityDescription 
               entityForName:@"UserEntity" inManagedObjectContext:moc]; 
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity:entityDescription]; 


NSArray *array = [moc executeFetchRequest:request error:&error]; 
    if (array == nil) 
    { 
     // Deal with error... 
    } 

    if ([array count]==0) { 
     //first run of app 

    }else if([array count]==1) 
    { 
     // id like the code to enter here after every app run except for the first one 

    }else 
    { 

     //dont want this to happen 
    } 

Respuesta

3

Uso el enfoque de Matt Gallagher descrito en su artículo Singletons, AppDelegates and top-level data.

Utiliza una macro para crear una clase de "singleton sintetizado" a la que puede acceder desde cualquier lugar. Muy útil para cosas como sesiones, contextos de objetos administrados, etc. De lo contrario, tendrías que pasar esta ronda por todos lados.

+0

que es una solución realmente excelente. De hecho, he usado ese macro antes, lo olvidé por completo. – dubbeat

+1

No parece haber nada específico para Core Data en el artículo de Matt Gallager. – ThomasW

+0

De acuerdo, esta respuesta no tiene nada que ver con Datos centrales, lo que realmente debería abordarse si se puede usar o no una restricción para garantizar que solo exista una instancia de una entidad específica en un almacén de datos. –

2

Su enfoque debería funcionar y tiene la ventaja de ser flexible. Considere la posibilidad de que una versión futura de su aplicación tenga la capacidad de administrar varias cuentas; usted podría lograr esto fácilmente si modela su "singleton" como una entidad regular.

Si está 100% seguro de que nunca querría eso, podría usar la propiedad de la tienda persistente metadata para cosas como esta.

+0

No estaba al tanto de los metadatos persistentes de la tienda. Comprobándolo ahora – dubbeat

Cuestiones relacionadas