【问题标题】:Couldn't find '.momd' file找不到“.momd”文件
【发布时间】:2013-06-30 18:54:12
【问题描述】:

我的应用使用CoreData,模型名为:mupo-ios.xcdatamodel。这个模型是原始模型的第二个版本:Model.xcdatamodeld。我通过文档使用managedObjectContext

        NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject];
        url = [url URLByAppendingPathComponent:@"MyDocument"];

        self.document = [[UIManagedDocument alloc] initWithFileURL:url];

        // Set our document up for automatic migrations
        NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                 [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];            
        self.document.persistentStoreOptions = options;
    }

后来,我访问了managedObjectContext

    self.managedObjectContext = self.document.managedObjectContext;

现在,我想直接访问主上下文,代码如下:

- (NSManagedObjectContext *)mainContext {
    if (!_mainContext) {
        _mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        _mainContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
    }
    return _mainContext;
}

问题是当我尝试指定 managedObjectModel 时:

- (NSManagedObjectModel *)managedObjectModel {
    if (!_managedObjectModel) {
NSString *localModelPath = [[NSBundle mainBundle] pathForResource:@"mupo-ios" ofType:@"momd"];
        NSURL *modelUrl = [NSURL fileURLWithPath:localModelPath];    
        _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];
    }
    return _managedObjectModel;
}

找不到 momd 的文件,因此无法初始化 managedObjectModel。有人可以帮帮我吗?

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    这个问题在一个复杂的场景中发生在我身上。我在一个工作区中有两个 xcodeproj。

    我尝试在第二个项目中使用相同的 xcdatamodeld 文件通过将其从第一个项目拖到 xcode 中的第二个项目。这正确创建了一个引用,但即使将文件添加到“编译资源”,也没有创建 modm 文件。

    解决方案是直接从 Finder 中将 xcdatamodeld 拖放到第二个项目中,而不是从 xcode 中的第一个项目中。

    【讨论】:

    • 在从 finder 拖放之前从工作区中删除 xcdatamodeld 文件
    • 这是真的!即使在 2016 年的 Xcode 8 中,这个 bug 仍然存在。
    • 谢谢,这也适用于我。您可以通过将 xcmod​​eld 文件添加到 Build Phases -> Compile Sources - 单击 + 然后 Add Other... 来获得类似的效果。请注意,这会将 xcmod​​eld 文件再次添加到项目源中,因此您可能已经删除了引用以避免重复引用。
    【解决方案2】:

    在这一行:

    NSString *localModelPath = [[NSBundle mainBundle] pathForResource:@"mupo-ios" ofType:@"momd"];
    

    momd 更改为mom

    【讨论】:

    • 这个模型在你制作的静态库中吗?还是在一个项目中包含所有内容?在目标-> 构建阶段-> 复制捆绑资源:你在那里看到你的模型吗?
    • 我的项目包罗万象。我可以在目标->构建阶段->复制捆绑资源中看到它。
    【解决方案3】:

    我以这种方式解决了这个问题(虽然我不完全理解它为什么会起作用):

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

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2012-04-15
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多