2011-08-04 10 views
17

he revisado varias publicaciones en Internet y stackOverflow, pero no he podido encontrar una respuesta hasta el momento. Este es mi AppDelegate, por lo que yo sé, las implementaciones son bastante estándar .. Acabo de añadir la siguiente línea y pasé los argumentos, pero no sirvió de nada ..Sigue recibiendo "Este NSPersistentStoreCoordinator no tiene tiendas persistentes. No puede realizar una operación de guardado". al cerrar mi aplicación (OSX)

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

Limpié mi proyecto, que tampoco ayudó. Además, la carpeta ApplicationSupport no se crea. ¿Es posible que esta sea la causa del problema? No creé la aplicación con la opción "use core data", pero proporcioné los métodos necesarios ...

- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {...} está en la parte inferior.

¡La ayuda es muy apreciada!

#import "WebLogClientAppDelegate.h" 

// create anonymous catergories for uses in this class 
@interface WebLogClientAppDelegate(); 
@property(nonatomic, readonly) NSString *applicationSupportFolder; 
@property(nonatomic, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
@end 

@implementation WebLogClientAppDelegate 
@synthesize autorPrefFeld, benutzerPrefFeld, passwortPrefFeld, hauptfenster, 
managedObjectModel, managedObjectContext, autor; 

- (void) applicationWillFinishLaunching:(NSNotification *)notification 
{ 
    NSLog(@"applicationWillFinishLaunching"); 
    NSDictionary *defaultsDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Mathias Mustermann", @"autor", 
            @"mathias", @"benutzer", 
            @"passwort",@"passwort", nil]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDict]; 
} 

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender 
{ 
    [moc commitEditing]; 
    if ([moc hasChanges]) { 
     NSLog(@"Save needed!"); 
     [moc save:nil]; 
    } 
    return NSTerminateNow; 
} 

- (NSString *)autor{ 
    return [[NSUserDefaults standardUserDefaults] stringForKey:@"autor"]; 
} 

- (void)windowDidBecomeKey:(NSNotification *)notification 
{ 
    NSLog(@"windowDidBecomeKey"); 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [autorPrefFeld setStringValue:[defaults stringForKey:@"autor"]]; 
    [benutzerPrefFeld setStringValue:[defaults stringForKey:@"benutzer"]]; 
    [passwortPrefFeld setStringValue:[defaults stringForKey:@"passwort"]]; 
} 

- (void)windowDidResignKey:(NSNotification *)notification 
{ 
    NSLog(@"windowDidResignKey"); 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[autorPrefFeld stringValue] forKey:@"autor"]; 
    [defaults setObject:[benutzerPrefFeld stringValue] forKey:@"benutzer"]; 
    [defaults setObject:[passwortPrefFeld stringValue] forKey:@"passwort"]; 
    [defaults synchronize];  
} 

- (NSManagedObjectModel *)managedObjectModel 
{ 
    if(objectModel){ 
     return objectModel; 
    } 
    objectModel= [NSManagedObjectModel mergedModelFromBundles:nil]; 
    return objectModel; 
} 

- (NSString *)applicationSupportFolder 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); 
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory(); 
    return [basePath stringByAppendingPathComponent:@"WeblogClient"]; 
} 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (storeCoord) { 
     return storeCoord; 
    } 

    NSFileManager *fileManager; 
    NSString *applicationSupportFolder; 
    NSURL *url; 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
          [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

    fileManager = [NSFileManager defaultManager]; 
    applicationSupportFolder = self.applicationSupportFolder; 
    if (![fileManager fileExistsAtPath:applicationSupportFolder]) { 
     [fileManager createDirectoryAtPath:applicationSupportFolder withIntermediateDirectories:NO attributes:nil error:nil]; 
    } 
    url = [NSURL fileURLWithPath:[applicationSupportFolder stringByAppendingPathComponent:@"WeblogClient.xml"]]; 
    storeCoord = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; 
    [storeCoord addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:options error:nil]; 
    return storeCoord;     
} 



- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (moc) { 
     return moc; 
    } 
    NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator; 
    if (coordinator) { 
     moc = [NSManagedObjectContext new]; 
     [moc setPersistentStoreCoordinator:coordinator]; 
    } 
    return moc; 
} 

@end 

Respuesta

17

No estoy seguro si usted fijó su error, pero echa un vistazo a: I keep on getting "save operation failure" after any change on my XCode Data Model

También para mí, que tenía el mismo nombre storecordinator sqlite como otro proyecto en el que estaba trabajando y ya había corrió ...

+10

Tuve un problema similar. Solo tuve que eliminar y volver a instalar. Estaba en conflicto con las versiones anteriores de la base de datos. –

+0

Simplemente tuve que eliminar y volver a instalar. Estaba en conflicto con las versiones anteriores de la base de datos. - No es una solución adecuada. - Necesita ser migrado para eso. - Siga este http://www.raywenderlich.com/27657/how-to-perform-a-lightweight-core-data-migration para la migración. – Tarang

Cuestiones relacionadas