Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将配置永久存储以进行迁移的代码放在何处_Objective C_Cocoa_Core Data_Core Data Migration - Fatal编程技术网

Objective c 将配置永久存储以进行迁移的代码放在何处

Objective c 将配置永久存储以进行迁移的代码放在何处,objective-c,cocoa,core-data,core-data-migration,Objective C,Cocoa,Core Data,Core Data Migration,我已经创建了一个Mac应用程序,并在应用商店中分发给许多客户,我需要向核心数据模型添加一个属性。我阅读了苹果公司提供的文档,可供查阅 但是,它提供了以下代码块以启用自动迁移: NSError *error; NSPersistentStoreCoordinator *psc = <#The coordinator#>; NSURL *storeURL = <#The URL of a persistent store#>; NSDictionary *optionsDic

我已经创建了一个Mac应用程序,并在应用商店中分发给许多客户,我需要向核心数据模型添加一个属性。我阅读了苹果公司提供的文档,可供查阅

但是,它提供了以下代码块以启用自动迁移:

NSError *error;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSURL *storeURL = <#The URL of a persistent store#>;
NSDictionary *optionsDictionary =
    [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
                    forKey:NSMigratePersistentStoresAutomaticallyOption];

NSPersistentStore *store = [psc addPersistentStoreWithType:<#Store type#>
                                configuration:<#Configuration or nil#>
                                URL:storeURL
                                options:optionsDictionary
                                error:&error];
NSError*错误;
NSPersistentStoreCoordinator*psc=;
NSURL*storeURL=;
NSDictionary*选项字典=
[NSDictionary Dictionary WithObject:[NSNumber numberWithBool:是]
forKey:NSMigratePersistentStoresAutomaticallyOption];
NSPersistentStore*store=[psc addPersistentStoreWithType:
配置:
URL:storeURL
选项:选项字典
错误:&错误];
。。我不知道该把它放在哪里。有人提到(在另一个线程中)它进入了PersistentStoreCoordinator,但是,我只是使用默认的Cocoa应用程序模板,并启用了“使用核心数据进行存储”。我必须创建自己的AppDelegate,但从未见过任何关于PersistentStoreCoordinator的信息(现在仍然没有。我尝试创建一个新应用只是为了检查)。有人帮忙吗?我是Cocoa新手,但我的应用程序在没有PersistentStoreCoordinator的情况下运行得非常好,这就是为什么我还没有实现PersistentStoreCoordinator的原因。。我确实创建了一个AppDelegate,但当我将此代码放入其中时,它会抛出许多错误。帮助:/

编辑(为尼克):以下是新代码:

和我的头文件:

给你:与核心数据相关的标题和方法

应用程序代理标题-核心数据相关部分

@interface CoreDataFirstStepsAppDelegate : NSObject <UIApplicationDelegate> 
{    
     // ...
@private
    NSManagedObjectContext *managedObjectContext_;
    NSManagedObjectModel *managedObjectModel_;
    NSPersistentStoreCoordinator *persistentStoreCoordinator_;
}

// ...

@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
/**
 Returns the managed object context for the application.
 If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
 */
- (NSManagedObjectContext *)managedObjectContext {

    if (managedObjectContext_ != nil) {
        return managedObjectContext_;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext_ = [[NSManagedObjectContext alloc] init];
        [managedObjectContext_ setPersistentStoreCoordinator:coordinator];
    }
    return managedObjectContext_;
}


/**
 Returns the managed object model for the application.
 If the model doesn't already exist, it is created from the application's model.
 */
- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel_ != nil) {
        return managedObjectModel_;
    }
    NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"CoreDataFirstSteps" ofType:@"momd"];
    NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
    managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
    return managedObjectModel_;
}


/**
 Returns the persistent store coordinator for the application.
 If the coordinator doesn't already exist, it is created and the application's store added to it.
 */
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator_ != nil) {
        return persistentStoreCoordinator_;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataFirstSteps.sqlite"];

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSError *error;
        NSURL *storeURL = storeURL;
        NSPersistentStoreCoordinator *psc = persistentStoreCoordinator_;
        NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                 [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

        if (![psc addPersistentStoreWithType:NSSQLiteStoreType
                               configuration:nil
                                         URL:storeURL
                                     options:options 
                                       error:&error]) 
        {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }       
    }    

    return persistentStoreCoordinator_;
}

/**
 Returns the URL to the application's Documents directory.
 */
- (NSURL *)applicationDocumentsDirectory {
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

@尼克:谢谢你的回复。实际上,我必须创建自己的AppDelegate,其中没有一个。我将代码的第一部分粘贴到我的实现中,并将apple提供的代码放在括号中。在运行时,它到处抛出错误。我做错了什么?@Nick:我编辑了我的帖子来显示截图。感谢您到目前为止的帮助-如果有更多帮助,我们将不胜感激。请创建一个使用核心数据的干净模板应用程序,然后查看应用程序代理。核心数据如何插入到应用程序中非常简单。将相关方法移动到您的应用程序。您提供的代码无法编译,因为其中有像
这样的占位符,必须用实际代码替换。您可以用浅蓝色背景来识别它们。我已经修改了
-(NSPersistentStoreCoordinator*)persistentStoreCoordinator{…}
的代码,并输入了苹果的示例代码。它确实在我的模板项目中编译,但我不能保证它会解决你的问题。@Nick:谢谢你迄今为止的帮助。我复制/粘贴了你的代码,它只抛出了几个错误(我编辑了我的原始帖子来显示)。我需要在头文件中声明任何内容吗?(也附在邮件中)。