【发布时间】:2011-06-14 18:28:13
【问题描述】:
我一直在尝试开发一段 Core Data 代码并且遇到了问题。在我的代码的一个版本中,一切正常,但是在我尝试完善代码之后,我有旧版本,突然它不起作用。我没有改变这个类,这就是为什么我很困惑。
在原始版本中,我得到了可以在这篇文章底部看到的输出,这只有一行,即数据库。在这个版本中,我什么也得不到。
我感觉应用程序和 Core Data 之间的连接可能存在一些问题。我确实通过“项目->重命名”重命名了应用程序,所以也许这就是这个问题的原因?恐怕我不知道去哪里找。
编辑:刚刚看到 xcdatamodel 有旧名称!
EDIT2:是否重命名了旧版本的副本并遇到了同样的问题,所以我猜这个问题的原因是应用程序的重命名。现在我想知道如何将 Core Data 数据库与新名称对齐?
// Define qContext
NSManagedObjectContext *qContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"questions" inManagedObjectContext:qContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) {
...
2011-01-24 20:58:38.969 FamQuiz_v2[27431:207] fetchedObjects: ( “(实体:问题;id:0x7088740;数据:)”,...
======================================
=============== 更新==============
我用下面的代码测试了其他参数是否有数据:
//=========PREPARE CORE DATA DB===========//
if (managedObjectContext == nil) { managedObjectContext = [(FamQuiz_v2AppDelegate *)
[[UIApplication sharedApplication] delegate] managedObjectContext]; }
// Define qContext
NSManagedObjectContext *qContext = [self managedObjectContext];
NSLog(@" ");
NSLog(@"qContext: %@", qContext);
NSLog(@" ");
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"questions" inManagedObjectContext:qContext];
NSLog(@" ");
NSLog(@"entity: %@", entity);
NSLog(@" ");
[fetchRequest setEntity:entity];
NSLog(@" ");
NSLog(@"fetchRequest: %@", fetchRequest);
NSLog(@" ");
//>>>>ERROR COMING HERE
NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"fetchedObjects: %@", fetchedObjects);
NSLog(@"====STOP====");
结果如下,表明我确实可以访问数据库,或者?但仍然没有“fetchedObjects”:
2011-01-24 22:27:54.094 FamQuiz_R0_2[29523:207] qContext:
2011-01-24 22:27:54.095 FamQuiz_R0_2[29523:207]
2011-01-24 22:27:54.095 FamQuiz_R0_2[29523:207]
2011-01-24 22:27:54.120 FamQuiz_R0_2[29523:207] 实体:()名称问题,managedObjectClassName NSManagedObject,renamingIdentifier 问题,isAbstract 0,超实体名称(空),属性 {
idQ = "(), name idQ, isOptional 0, isTransient 0, 实体问题, renamingIdentifier idQ, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 200, attributeValueClassName NSNumber, defaultValue (null)" ;
qDiff = "(), 名称 qDiff, isOptional 0, isTransient 0, 实体问题, renamingIdentifier qDiff, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 200, attributeValueClassName NSNumber, defaultValue (null)" ;
qNrAccess = "(), 名称 qNrAccess, isOptional 0, isTransient 0, 实体问题, renamingIdentifier qNrAccess, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 200, attributeValueClassName NSNumber, defaultValue (null)" ;
qRegDate = "(), 名称 qRegDate, isOptional 0, isTransient 0, 实体问题, renamingIdentifier qRegDate, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 900, attributeValueClassName NSDate, defaultValue (null)" ;
qRightAnswer = "(), name qRightAnswer, isOptional 0, isTransient 0, 实体问题, renamingIdentifier qRightAnswer, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, defaultValue (null)" ;
qWrongAnswer1 = "(), name qWrongAnswer1, isOptional 0, isTransient 0, 实体问题, renamingIdentifier qWrongAnswer1, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, defaultValue (null)" ;
qWrongAnswer2 = "(), 名称 qWrongAnswer2, isOptional 0, isTransient 0, 实体问题, renamingIdentifier qWrongAnswer2, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, defaultValue (null)" ;
question = "(), name question, isOptional 0, isTransient 0, entity questions, renamingIdentifier question, 验证谓词 (\n), 警告 (\n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, defaultValue (null)" ;
}, 子实体 {
}, 用户信息 {
}, versionHashModifier (null)
2011-01-24 22:27:54.121 FamQuiz_R0_2[29523:207]
2011-01-24 22:27:54.123 FamQuiz_R0_2[29523:207]
2011-01-24 22:27:54.123 FamQuiz_R0_2[29523:207] fetchRequest:(实体:问题;谓词:((null));sortDescriptors:((null));类型:NSManagedObjectResultType;)
2011-01-24 22:27:54.124 FamQuiz_R0_2[29523:207]
2011-01-24 22:27:54.125 FamQuiz_R0_2[29523:207] fetchedObjects: (
)
2011-01-24 22:27:54.126 FamQuiz_R0_2[29523:207] ====停止====
===========UPDATE2==========
这里的代码是:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"FamQuiz_v2" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
=============== UPDATE-3 ==============
我真的对这个问题感到困惑,但确实测试了将应用程序重命名回原来的名称,然后我开始工作了。对我来说,这意味着在某处我找不到的连接,我一直在寻找。
我真的很想了解如何在不丢失与数据库的连接的情况下使用 Core Data 重命名应用程序。
如果有人能对此有所了解,我将不胜感激,因为我需要重命名它。
=============== UPDATE-4 ==============
只是为了更新这个问题,我从来没有成功地让这个东西工作,所以我决定利用“机会”来重写整个应用程序。听起来可能是解决这个问题的一种苛刻的方式,但由于对编程很陌生,它也让我能够清理代码。
我仍然很感兴趣如何解决这个问题。
【问题讨论】:
-
根据您的日志,managedObjectContext 没有打印任何内容。看看这个方法的 FamQuiz_v2AppDelegate: - (NSManagedObjectModel *)managedObjectModel 或者你在哪里创建你的 NSManagedObjectModel。可能值得将其与您的答案一起发布?
标签: iphone objective-c ios core-data