【问题标题】:Keep getting "This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation." upon closing my app (OSX)不断收到“此 NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。”关闭我的应用程序(OSX)
【发布时间】:2011-10-20 09:10:04
【问题描述】:

我已经检查了互联网和 stackOverflow 上的几篇帖子,但到目前为止找不到答案。这是我的 AppDelegate,据我所知,这些实现非常标准.. 我只是添加了以下行并传递了参数,但它没有帮助..

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

我清理了我的项目,这也没有帮助。也不会创建 ApplicationSupport 文件夹。这可能是问题的原因吗?我没有使用“使用核心数据”选项创建应用程序,但我提供了必要的方法...

-(NSPersistentStoreCoordinator *)persistentStoreCoordinator{...} 在底部!

非常感谢您的帮助!

#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

【问题讨论】:

    标签: iphone cocoa-touch cocoa macos core-data


    【解决方案1】:

    不确定您是否修复了错误,但请查看:I keep on getting "save operation failure" after any change on my XCode Data Model

    对我来说,我的 storecordinator sqlite 名称与我正在处理的另一个项目相同,并且已经运行...

    【讨论】:

    • 遇到了类似的问题。只好删除重新安装。它与早期版本的数据库冲突。
    • 只需要删除并重新安装。它与早期版本的数据库冲突。 - 它不是一个适当的解决方案。 - 需要为此进行迁移。 - 按照此raywenderlich.com/27657/… 链接进行迁移。
    猜你喜欢
    • 2013-03-07
    • 2016-02-04
    • 2020-05-30
    • 2012-08-18
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2023-03-16
    • 2019-11-12
    相关资源
    最近更新 更多