- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个 OSX 应用程序,并尝试从名为 Service 的 CoreData 实体加载我的实体。我正在使用默认的 Xcode 模板,它可以很好地保存我的实体。然而检索它们会引发此错误。
+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Service'
这是抛出错误的代码,该函数在awakeFromNib中调用
-( NSMutableArray * )getServices {
//NSManagedObjectContext *context = [(SAAppDelegate *)[[NSApplication sharedApplication] delegate] managedObjectContext];
SAAppDelegate *delegate = (SAAppDelegate*)[[NSApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegate managedObjectContext];
NSLog(@"After managedObjectContext: %@", context);
NSEntityDescription *entity = [ NSEntityDescription entityForName:@"Service" inManagedObjectContext: context ];
NSSortDescriptor *sortDescriptor = [ [ NSSortDescriptor alloc] initWithKey: @"service_name" ascending: YES ];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setSortDescriptors:[ NSArray arrayWithObject: sortDescriptor]];
[context processPendingChanges];
NSError *error;
return [ NSMutableArray arrayWithArray: [ context executeFetchRequest:request error:&error ] ];
}
此处供引用的是 AppDelegate.m 文件中的 ManagedObjectContext。
//
// SAAppDelegate.m
// ServerAngel
//
// Created by Adam Bulmer on 29/10/2013.
// Copyright (c) 2013 Adam Bulmer. All rights reserved.
//
#import "SAAppDelegate.h"
@implementation SAAppDelegate
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize managedObjectContext = _managedObjectContext;
@class SAServerListWindowController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
// Returns the directory the application uses to store the Core Data store file. This code uses a directory named "com.adambulmer.ServerAngel" in the user's Application Support directory.
- (NSURL *)applicationFilesDirectory
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *appSupportURL = [[fileManager URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject];
return [appSupportURL URLByAppendingPathComponent:@"com.adambulmer.ServerAngel"];
}
// Creates if necessary and returns the managed object model for the application.
- (NSManagedObjectModel *)managedObjectModel
{
if ( _managedObjectModel == nil ) {
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ServerAngel" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
}
return _managedObjectModel;
}
// Returns the persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. (The directory for the store is created, if necessary.)
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if ( _persistentStoreCoordinator == nil ) {
NSManagedObjectModel *mom = [ self managedObjectModel ];
NSFileManager *fileManager = [ NSFileManager defaultManager ];
NSURL *applicationFilesDirectory = [ self applicationFilesDirectory ];
NSError *error = nil;
NSDictionary *properties = [ applicationFilesDirectory resourceValuesForKeys:@[ NSURLIsDirectoryKey ] error:&error ];
if ( ! properties ) {
BOOL ok = NO;
if ( [ error code ] == NSFileReadNoSuchFileError ) {
ok = [ fileManager createDirectoryAtPath:[ applicationFilesDirectory path ] withIntermediateDirectories:YES attributes:nil error:&error ];
}
if ( ! ok ) {
[ [ NSApplication sharedApplication ] presentError:error ];
NSLog( @"1 - test" );
return nil;
}
} else {
if ( ! [ properties[ NSURLIsDirectoryKey ] boolValue ] ) {
// Customize and localize this error.
NSString *failureDescription = [NSString stringWithFormat:@"Expected a folder to store application data, found a file (%@).", [applicationFilesDirectory path]];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValue:failureDescription forKey:NSLocalizedDescriptionKey];
error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:101 userInfo:dict];
[ [ NSApplication sharedApplication ] presentError:error ];
NSLog( @"2 - test" );
return nil;
}
}
NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"ServerAngel.storedata"];
NSPersistentStoreCoordinator *coordinator = [ [ NSPersistentStoreCoordinator alloc ] initWithManagedObjectModel:mom ];
if ( ! [ coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error ] ) {
[ [ NSApplication sharedApplication] presentError:error ];
return nil;
}
NSLog(@"AppDelegate coordinator: %@", coordinator);
_persistentStoreCoordinator = coordinator;
}
return _persistentStoreCoordinator;
}
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
- (NSManagedObjectContext *)managedObjectContext
{
if ( _managedObjectContext == nil ) {
_managedObjectContext = [ [ NSManagedObjectContext alloc ] init ];
NSPersistentStoreCoordinator *coordinator = [ self persistentStoreCoordinator ];
if ( coordinator != nil ) {
[ _managedObjectContext setPersistentStoreCoordinator: coordinator ];
}
NSLog(@"AppDelegate coordinator: %@", coordinator);
}
NSLog(@"AppDelegate managedObjectContext: %@", _managedObjectContext);
return _managedObjectContext;
}
// Returns the NSUndoManager for the application. In this case, the manager returned is that of the managed object context for the application.
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window
{
return [[self managedObjectContext] undoManager];
}
// Performs the save action for the application, which is to send the save: message to the application's managed object context. Any encountered errors are presented to the user.
- (IBAction)saveAction:(id)sender
{
NSError *error = nil;
if (![[self managedObjectContext] commitEditing]) {
NSLog(@"%@:%@ unable to commit editing before saving", [self class], NSStringFromSelector(_cmd));
}
if (![[self managedObjectContext] save:&error]) {
[[NSApplication sharedApplication] presentError:error];
}
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
// Save changes in the application's managed object context before the application terminates.
if (!_managedObjectContext) {
return NSTerminateNow;
}
if (![[self managedObjectContext] commitEditing]) {
NSLog(@"%@:%@ unable to commit editing to terminate", [self class], NSStringFromSelector(_cmd));
return NSTerminateCancel;
}
if (![[self managedObjectContext] hasChanges]) {
return NSTerminateNow;
}
NSError *error = nil;
if (![[self managedObjectContext] save:&error]) {
// Customize this code block to include application-specific recovery steps.
BOOL result = [sender presentError:error];
if (result) {
return NSTerminateCancel;
}
NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message");
NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info");
NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title");
NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title");
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:question];
[alert setInformativeText:info];
[alert addButtonWithTitle:quitButton];
[alert addButtonWithTitle:cancelButton];
NSInteger answer = [alert runModal];
if (answer == NSAlertAlternateReturn) {
return NSTerminateCancel;
}
}
return NSTerminateNow;
}
@end
错误日志
2013-11-14 22:01:38.267 ServerAngel[1012:303] Network check
2013-11-14 22:01:48.161 ServerAngel[1012:303] network avi
2013-11-14 22:01:48.162 ServerAngel[1012:303] After managedObjectContext: (null)
2013-11-14 22:01:48.162 ServerAngel[1012:303] +entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Service'
2013-11-14 22:01:48.163 ServerAngel[1012:303] (
0 CoreFoundation 0x00007fff877c941c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff85c31e75 objc_exception_throw + 43
2 CoreData 0x00007fff8d202729 +[NSEntityDescription entityForName:inManagedObjectContext:] + 217
3 ServerAngel 0x0000000100002d9d -[SAServerListWindowController getServices] + 205
4 ServerAngel 0x0000000100003294 -[SAServerListWindowController checkServices] + 148
5 Foundation 0x00007fff894d1094 __NSFireTimer + 96
6 CoreFoundation 0x00007fff87730724 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
7 CoreFoundation 0x00007fff8773025f __CFRunLoopDoTimer + 1151
8 CoreFoundation 0x00007fff877a176a __CFRunLoopDoTimers + 298
9 CoreFoundation 0x00007fff876ebaa5 __CFRunLoopRun + 1525
10 CoreFoundation 0x00007fff876eb275 CFRunLoopRunSpecific + 309
11 HIToolbox 0x00007fff8e4b3f0d RunCurrentEventLoopInMode + 226
12 HIToolbox 0x00007fff8e4b3cb7 ReceiveNextEventCommon + 479
13 HIToolbox 0x00007fff8e4b3abc _BlockUntilNextEventMatchingListInModeWithFilter + 65
14 AppKit 0x00007fff8ef1828e _DPSNextEvent + 1434
15 AppKit 0x00007fff8ef178db -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
16 AppKit 0x00007fff8ef0b9cc -[NSApplication run] + 553
17 AppKit 0x00007fff8eef6803 NSApplicationMain + 940
18 ServerAngel 0x00000001000049a2 main + 34
19 libdyld.dylib 0x00007fff88cbf5fd start + 1
)
2013-11-14 22:01:48.255 ServerAngel[1012:303] Network check
最佳答案
未调用托管对象上下文的访问器方法 - 您甚至看不到来自延迟加载方法的日志。
我的猜测是应用程序委托(delegate)未正确连接。如果您使用调试器,您可能会看到这一行:
SAAppDelegate *delegate = (SAAppDelegate*)[[NSApplication sharedApplication] delegate];
返回nil
。
OS X 应用程序默认没有委托(delegate),您必须专门设置它们,通常通过向主 xib 文件添加一个对象,将其标识为您的委托(delegate)类并将其连接到应用程序对象的委托(delegate)导出。
如果这是连接的(并且因为您说您已经使用了默认模板,所以它确实包含了开箱即用的所有内容),那么问题一定是您从错误的awakeFromNib
方法,或者您添加了一些其他未正确设置的 nib 文件。
关于objective-c - ManagedObjectContext 从 AppDelegate 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983419/
因此,我有 CoreData 实体 Book、Bookmark、Highlight。一本书包含关于这本书的信息和一个 Bookmarks 的 NSSet。 我想删除一本书中的书签,然后立即用我的集合重
(如果这个问题有点令人困惑/不精确,我很抱歉。我只是在学习高级 CoreData 用法,我不太了解术语和其他东西)。 我有一个单例 Game,它包含您在游戏过程中需要的某些数据。例如,您可以从那里访问
我有一个基本的 SwiftUI 应用程序,它初始化了 NSPersistentCloudKitContainer在应用程序启动时基于持久堆栈并将 viewContext 注入(inject)环境并将其
我正在将 Core Data 集成到不是使用 Core Data 模板创建的应用程序中。我对此有疑问,可能有一个非常简单的答案。然而,由于大多数关于这个主题的教程都是针对使用模板的,所以我很难过。 我
多个 ManagedObjectContext (MOC) 如何在核心数据中工作(Swift 2、iOS 9)。我浏览了很多在线链接和 Material 以及 StackOverflow 上的答案,但
我正在尝试创建一个新的核心数据对象,并用某个 View 的 subview 的一些信息填充它。 (只是为了用 template_control 对象填充数组) 有什么问题?该对象无法保存,但稍后当我对
我有两个 ManagedObjectContext(MOC):一个临时MOC 和一个持久MOC。如果我在 tempMOC 中初始化一个实体并且用户决定保存,我将保存更改并将更改合并到 persiste
我正在尝试学习核心数据,但在将新对象添加到现有对象后更新 MOC 时遇到问题。我可以创建原始对象(训练日),并且可以将练习对象添加到该训练日,但我不知道如何保存上下文,以便稍后在我的应用程序中可以找到
非常需要建议,目前没有想法。我与核心数据并发相关的问题叠加在一起,调试我使用 -"com.apple.CoreData.ConcurrencyDebug"和我所拥有的: 堆栈: 线程 3 队列:cor
我正在按照教程开发 iOS 应用程序。我正在使用核心数据。应用程序的第一个 View 是 RootViewController。所有核心数据堆栈都在 AppDelegate 文件中。这是 AppDel
我目前正在开发一个发出 HTTP 请求(通过 AsiHTTPRequest)然后解析 JSON 流的应用程序。基本上有一个 tableView/NSFetchedResultsController,它
我有一个应用程序,它使用 CoreData 使用 MPMediaPicker 保存不同的播放列表。保存第一个后,当我尝试添加第二个时,应用程序崩溃了。下面是整个调试队列。 创建第一条记录。 music
如何管理临时保存的 CoreData?一旦我做了这样的事情: var myClass: MyClass = NSEntityDescription.insertNewObjectForEntityFo
在我正在开发的应用程序中,我需要同时访问和写入核心数据。我已经能够收集到这意味着我需要使用多个 managedObjectContexts,但我不明白我应该如何设置这两个 managedObjectC
我是 iOS 开发新手。我正在编写一个允许用户读取/写入核心数据记录的 iOS 应用程序。这些记录将通过 http 同步到服务器。我有一组链式(串行)NSOperations 在执行同步的后台线程中运
我正在尝试将核心数据添加到现有项目中。我有: 1) 添加了核心数据框架2)将访问器和属性添加到 AppDelegate3)创建数据模型文件 现在当我尝试调用NSManagedObjectContext
我想使用单例 UIApplication 来访问 AppDelegate 的 managedObjectContext。但是当我写 [[[UIApplication sharedApplication
在我的 iOS 应用程序中,我有一个核心数据,我注意到有时在特定 View 中,当我从核心数据中检索信息时,并不总是最新的,我解释得很好: 如果我更新核心数据中的一些值,然后进入特定 View 查看此
我在 iPhone 上的核心数据项目遇到问题。当用户开始添加对象,然后在此过程中取消时,就会发生这种情况。 如果用户点击取消并返回到对象列表,则会在那里列出一个虚拟对象,代表他们正在创建的对象。这永远
我有两个实体,我将它们建模为类和核心数据模型实体/这些类如下所示: 类:StateManager #import #import #import "StateManager.h" #import
我是一名优秀的程序员,十分优秀!