"无法加载NSManagedObjectModel。 nil是非法的网址参数"

时间:2015-10-06 10:14:22

标签: ios objective-c iphone core-data

我想从AppDelegate获取托管对象上下文,但是在我将两行代码放入方法之后应用程序崩溃了,即使我没有做任何其他事情,并且调试区域中有一条消息:&#34 ; CoreData:无法加载NSManagedObjectModel。 nil是非法的URL参数......"

我的方法中添加的代码:

AppDelegate *delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext;
AppDelegate中的

-managedObjectModel方法:

- (NSManagedObjectModel *)managedObjectModel {
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
if (_managedObjectModel != nil) {
    return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}

和-managedObjectContext方法:

- (NSManagedObjectContext *)managedObjectContext {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
    return _managedObjectContext;
}

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

" FoodPin"是我的项目名称。那么这里有什么问题?我是iPhone编程的新手(尤其是核心数据)。

任何人都可以帮助我吗?

...谢谢

6 个答案:

答案 0 :(得分:24)

问题在于这一行:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"];

modelURLnil,表示系统无法找到资源FoodPin.momd

确保您的项目中有一个名为FoodPin的核心数据模型。它将在Project Navigator中显示为FoodPin.xcdatamodeld

答案 1 :(得分:3)

我有同样的问题,但对我来说,modelURL设置正确。问题是我的* .xcdatamodeld文件不再出现在Copy bundle ressources中了。我不知道为什么它会消失但是再次添加就可以解决问题。

以下是修复方法: 你投射>构建阶段>复制捆绑资源> " +"按钮并选择你xcdatamodeld文件

答案 2 :(得分:1)

尝试用“妈妈”代替“妈妈”

NSURL * modelURL = [[NSBundle mainBundle] URLForResource:@“ name” withExtension:@“ mom”];

答案 3 :(得分:0)

NSURL * modelURL = [[NSBundle mainBundle] URLForResource:@“XYZ”withExtension:@“momd”];

确保您的数据模型名称与URLForResource:XYZ匹配。

答案 4 :(得分:0)

好的,这就是我要做的。我已将iOS版本还原到9.x,以便在我拥有的旧iPad上运行。这会导致错误,因为捆绑包中的先前版本必须区分大小写。

答案 5 :(得分:-1)

我有同样的错误。

// ValueChanged for Slider
private void TimeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    Dispatcher.Invoke(() => {
        TimeSpan videoPosition = TimeSpan.FromSeconds(TimeSlider.Value);
        VideoPlayer.Position = videoPosition;
        TimeLabel.Content = Utilities.numberSecondsToString((int)VideoPlayer.Position.TotalSeconds, true, true) + " / " + _durationString;
    });
}

// DragStarted event
private void slider_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
{
    Dispatcher.Invoke(() => {
        VideoPlayer.ScrubbingEnabled = true;
        VideoPlayer.Pause();
    });
}

// DragCompleted event
private void slider_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
{
    Dispatcher.Invoke(() => {
        VideoPlayer.ScrubbingEnabled = false;
        TimeSpan videoPosition = TimeSpan.FromSeconds(TimeSlider.Value);
        VideoPlayer.Position = videoPosition;
        if (_isPlaying) // if was playing when drag started, resume playing
            VideoPlayer.Play();
        else
            VideoPlayer.Pause();
    });
}

&#34; N&#34;在名字中必须是&#34; N&#34;:就像对象中的其他一切一样,这位母亲是区分大小写的。