gpt4 book ai didi

macos - 使用核心数据时的 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-03 17:06:02 29 4
gpt4 key购买 nike

我是 Cocoa 新手,正在编写一个简单的应用程序来学习使用 Core Data,但它因 EXC_BAD_ACCESS 而崩溃。尝试了几种方法,但尚未找到解决方案。正如我所说,我对 Cocoa 的经验不是很丰富。

我遵循了通常的核心数据教程。

这是我的模型:

enter image description here

我已将这两个实体作为 NSArrayController 添加到我的 Nib 文件中,并有两个 NSTableView 与实体对象进行值绑定(bind)。

这是代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSManagedObjectContext *context = [self managedObjectContext];
TaskList *list = [NSEntityDescription
insertNewObjectForEntityForName:@"TaskList"
inManagedObjectContext: context]; // EXC_BAD_ACCESS happens here
[list setTitle:@"Inbox"];
Task *task = [NSEntityDescription
insertNewObjectForEntityForName:@"Task"
inManagedObjectContext: context];
[task setKey:@"Remember the milk"];
[task setList:list];
NSError *error;
if (![context save:&error]) {
NSLog(@"Error: %@", [error localizedDescription]);
}
}

就是这样!这就是我的全部计划。我正在使用 Xcode 4.2 开发 Mac 应用程序,并且启用了 ARC。

更新: jrturton 要求我包含 [self ManagedObjectContext] 的实现。我没有编写此代码,但这是我在 AppDelegate.h 中找到的内容:

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

这是来自 AppDelegate.m:

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

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey];
[dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey];
NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
[[NSApplication sharedApplication] presentError:error];
return nil;
}
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];

return __managedObjectContext;
}

最佳答案

检查您的托管对象模型。确保所有实体和属性名称拼写正确。还要检查您的对象类文件并确保它们包含您期望的内容。

也许调试器在崩溃时不会向您显示正确的行:我注意到,您有一个方法 setKey:,但在您的任务实体中没有名为 key 的属性。尝试使用点符号设置所有属性,例如 list.title = @"Inbox"。 (这通常更容易阅读并避免类似的错误。)

按照建议,在插入新实体的行之前,设置断点并确保托管对象上下文不为空。

最后,也许您必须强制转换对象。 insertNewObjectForEntityForName: 返回一个 NSManagedObject 类型的对象,但您将其分配给 TaskList 类型。在使用对象之前尝试添加强制转换:

TaskList *list = (TaksList *) [NSEntityDescription
insertNewObjectForEntityForName:@"TaskList"
inManagedObjectContext: context];

关于macos - 使用核心数据时的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196879/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com