在 CoreData CLI 中导入 .xcdatamodel
我在使用 CoreData 命令行工具时遇到了一些问题。我只是在 XCode(核心数据 CLI)中创建了一个新项目,在 .xcdatamodel 文件中创建了一个数据模型并自动生成了一个头文件。最后我修改了代码,应该能够加载实体。
该程序编译没有错误,但如果我运行该程序,我会收到以下错误
2010-08-26 20:16:52.031 Core Data Test[866:903] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Kunde''
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff884bbcc4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff85a630f3 objc_exception_throw + 45
2 CoreData 0x00007fff821467a9 +[NSEntityDescription entityForName:inManagedObjectContext:] + 153
3 CoreData 0x00007fff821798a1 +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] + 33
4 Core Data Test 0x0000000100001abf managedObjectModel + 95
5 Core Data Test 0x0000000100001b7f managedObjectContext + 156
6 Core Data Test 0x00000001000019b7 main + 47
7 Core Data Test 0x0000000100001980 start + 52
8 ??? 0x0000000000000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
Abort trap
这是我的代码: svn://homes.dnsalias.com/CoreDataOwnTesting 或易于复制
svn co svn://homes.dnsalias.com:3690/CoreDataOwnTesting
有人知道我做错了什么吗?感谢您的帮助! Dennis
由 JLN 添加的代码
NSManagedObjectModel *managedObjectModel();
NSManagedObjectContext *managedObjectContext();
NSManagedObjectContext *context;
int main (int argc, const char * argv[]) {
objc_startCollectorThread();
// Create the managed object context
context = managedObjectContext();
NSManagedObjectModel *kunde = managedObjectModel();
// Save the managed object context
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Error while saving\n%@",
([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
exit(1);
}
return 0;
}
NSManagedObjectModel *managedObjectModel() {
static NSManagedObjectModel *model = nil;
if (model != nil) {
return model;
}
model = [NSEntityDescription insertNewObjectForEntityForName:@"Kunde" inManagedObjectContext:context];
/*NSString *path = [[[NSProcessInfo processInfo] arguments] objectAtIndex:0];
path = [path stringByDeletingPathExtension];
NSURL *modelURL = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"mom"]];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
*/
return model;
}
NSManagedObjectContext *managedObjectContext() {
static NSManagedObjectContext *context = nil;
if (context != nil) {
return context;
}
context = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel()];
[context setPersistentStoreCoordinator: coordinator];
NSString *STORE_TYPE = NSSQLiteStoreType;
NSString *path = [[[NSProcessInfo processInfo] arguments] objectAtIndex:0];
path = [path stringByDeletingPathExtension];
NSURL *url = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"sqlite"]];
NSError *error;
NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:nil error:&error];
if (newStore == nil) {
NSLog(@"Store Configuration Failure\n%@",
([error localizedDescription] != nil) ?
[error localizedDescription] : @"Unknown Error");
}
return context;
}
i've a little Problem with a CoreData Command Line Tool. I simply created a new Project in XCode (Core Data CLI), created a Data Model in the .xcdatamodel File and auto generated a Header file. Finaly i modified the Code, wich should able to load the Entity.
The Program Compiles without errors, but if i run the Program i get the following error
2010-08-26 20:16:52.031 Core Data Test[866:903] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Kunde''
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff884bbcc4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff85a630f3 objc_exception_throw + 45
2 CoreData 0x00007fff821467a9 +[NSEntityDescription entityForName:inManagedObjectContext:] + 153
3 CoreData 0x00007fff821798a1 +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] + 33
4 Core Data Test 0x0000000100001abf managedObjectModel + 95
5 Core Data Test 0x0000000100001b7f managedObjectContext + 156
6 Core Data Test 0x00000001000019b7 main + 47
7 Core Data Test 0x0000000100001980 start + 52
8 ??? 0x0000000000000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
Abort trap
Here's my code: svn://homes.dnsalias.com/CoreDataOwnTesting or simple to copy
svn co svn://homes.dnsalias.com:3690/CoreDataOwnTesting
Does anyone have an Idea what i am doing wrong? Thank's for your help!
Dennis
Code added by JLN
NSManagedObjectModel *managedObjectModel();
NSManagedObjectContext *managedObjectContext();
NSManagedObjectContext *context;
int main (int argc, const char * argv[]) {
objc_startCollectorThread();
// Create the managed object context
context = managedObjectContext();
NSManagedObjectModel *kunde = managedObjectModel();
// Save the managed object context
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Error while saving\n%@",
([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
exit(1);
}
return 0;
}
NSManagedObjectModel *managedObjectModel() {
static NSManagedObjectModel *model = nil;
if (model != nil) {
return model;
}
model = [NSEntityDescription insertNewObjectForEntityForName:@"Kunde" inManagedObjectContext:context];
/*NSString *path = [[[NSProcessInfo processInfo] arguments] objectAtIndex:0];
path = [path stringByDeletingPathExtension];
NSURL *modelURL = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"mom"]];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
*/
return model;
}
NSManagedObjectContext *managedObjectContext() {
static NSManagedObjectContext *context = nil;
if (context != nil) {
return context;
}
context = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel()];
[context setPersistentStoreCoordinator: coordinator];
NSString *STORE_TYPE = NSSQLiteStoreType;
NSString *path = [[[NSProcessInfo processInfo] arguments] objectAtIndex:0];
path = [path stringByDeletingPathExtension];
NSURL *url = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"sqlite"]];
NSError *error;
NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:nil error:&error];
if (newStore == nil) {
NSLog(@"Store Configuration Failure\n%@",
([error localizedDescription] != nil) ?
[error localizedDescription] : @"Unknown Error");
}
return context;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看来您在设置核心数据堆栈的方式上遇到了一些基本问题。也就是说,第一个问题(我停在那里)是您尝试从 NSEntityDescription 创建 NSManagedObjectModel 实例。繁荣。
您是否已阅读并遵循核心数据实用程序教程?对您来说,按照教程并报告您在其中发现的问题比在此处重复其说明更容易。
It looks like you've got some basic problems in the way you're setting up the Core Data Stack. Namely, the first problem (and I stopped there) is that you're trying to create an NSManagedObjectModel instance from an NSEntityDescription. Boom.
Have you read and followed the Core Data Utility Tutorial? It's easier for you to follow the tutorial and report on the problems you find there than to parrot its instructions here.