【问题标题】:-[NSURL initFileURLWithPath:]: nil string parameter' on NSManagedObjectModel-[NSURL initFileURLWithPath:]: NSManagedObjectModel 上的 nil 字符串参数
【发布时间】:2011-03-14 08:50:55
【问题描述】:

只是试图进入核心数据的东西并立即被交叉。在我的 AppDelegate 中,我有以下代码:

- (NSManagedObjectModel *)managedObjectModel {

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

@"DataModel" 是我的 .xcdatamodel 文件的名称 - 这是正确的吗?

【问题讨论】:

  • 您确定您的模型是 momd 类型而不是 mom 类型吗? (版本化与非版本化模型)

标签: iphone core-data ipad


【解决方案1】:

通常更容易将其更改为

managedObjectModel_ = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

那么,如果是妈妈或妈妈,你仍然会得到模型。

【讨论】:

  • managedObjectModel_ = [[NSManagedObjectModel mergeModelFromBundles:nil] 保留];
【解决方案2】:

将“momd”改为“mom”对我有用。一旦我将语法固定为以下内容,Marcus S. Zarra 的回答也对我有用:

managedObjectModel_ = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

虽然我不知道那条线是做什么的。

编辑:我做了更多的研究,现在我知道上面的行做了什么以及为什么它有效/无效。上面的行将在您的项目中搜索所有模型并将它们添加到 xcdatamodel。如果您不使用版本化模型,则此方法有效。但是,如果您将来切换到使用版本化模型,这将导入模型的所有版本,因此您将同时获得旧的和新的,这不是您想要的。所以解决方案是做两件事之一。如果您想使用非版本化模型,请使用以下行来获取模型:

NSString *modelPath = [[NSBundle mainBundle]
    pathForResource:@"DataModel" ofType:@"mom"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

如果您想使用版本化模型(推荐),请选择模型并从菜单栏中运行设计 -> 数据模型 -> 添加模型版本以创建版本化模型。这将自动将模型的扩展从 xcdatamodel 更改为 xcdatamodeld。完成后,使用以下行:

NSString *modelPath = [[NSBundle mainBundle]
    pathForResource:@"DataModel" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

请注意,唯一的区别是 ofType 参数从 @"mom" 更改为 @"momd"。我希望这可以为所有试图理解 CoreData.D 的人阐明正在发生的事情

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多