2011-08-04 6 views
17

kapatarak, internette ve stackOverflow'ta birkaç gönderi kontrol ettim ancak şu ana kadar bir cevap bulamadı. Bu da, projemi temizlenmiş"Bu NSPersistentStoreCoordinator ürününün kalıcı bir deposu yok." Uygulamamı (OSX)

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

.. olarak bildiğim kadarıyla, bu uygulamaları ben sadece aşağıdaki satırı eklendi ve argümanlar geçti, ama yardım etmedi .. oldukça standart, benim AppDelegate olduğunu ya da yardım etmedi. Ayrıca ApplicationSupport klasörü oluşturulmuyor. Sorunun sebebi bu olabilir mi? Uygulamayı "çekirdek verileri kullan" seçeneği ile oluşturmadım, ancak gerekli yöntemleri sağladım ...

- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {...} altta!

Yardımı büyük beğeni topluyor! Eğer hata sabit, ama check out eğer

#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 

cevap

17

emin değil: I keep on getting "save operation failure" after any change on my XCode Data Model

Ayrıca benim için, ben üzerinde çalışıyordu başka projeyle aynı storecordinator sqlite adı vardı ve zaten ...

işletiyordu
+10

Benzer bir sorunla karşılaştım. Sadece silmek ve yeniden yüklemek zorunda kaldı. Veritabanının önceki sürümleriyle çelişiyordu. –

+0

Sadece silmek ve yeniden yüklemek zorunda kaldı. Veritabanının önceki sürümleriyle çelişiyordu. - Uygun bir çözüm değil. - Bunun için Göç yapmak gerekiyor. - Taşıma için bu http://www.raywenderlich.com/27657/how-to-perform-a-lightweight-core-data-migration bağlantısını izleyin. – Tarang