2011-01-24 78 views
1

我一直在试图开发一个核心数据的一段代码,并且遇到了问题。在我的代码的一个版本中,一切正常,但在我一直试图擦亮代码之后,我拥有旧版本,并且突然不起作用。我没有改变这个班,这就是为什么我感到困惑。核心数据问题,应用程序重命名后?

在原始版本中,我得到的可以在这篇文章的底部看到的输出,这只是一行,这是数据库。在这个版本中,我什么都没有。

我有一种感觉,它可能是应用程序和核心数据之间的连接的一些问题。我确实通过“Project - > Rename”重命名了应用程序,所以也许这就是这个问题的原因?恐怕我不知道去哪里看。

编辑:只看到xcdatamodel有旧名称!

编辑2:是否重命名旧版本的副本,并得到相同的问题,所以我想这个问题的原因是应用程序的重命名。现在我想知道如何将核心数据数据库与新名称对齐?

// 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;数据:)”,...

=====================================

====== =========更新==============

我做了测试,如果有其他参数中有任何数据与以下公司de:

//=========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,超级名称(null),属性idQ =“(),name idQ,isOptional 0,isTransient 0,实体问题,renamingIdentifier idQ,验证谓词(\ n),警告(\ n),versionHashModifier(null),attributeType 200,attributeValueClassName NSNumber,defaultValue(null)“;
qDiff =“(),name qDiff,isOptional 0,isTransient 0,entity questions,renamingIdentifier qDiff,validation predicates(\ n),warnings(\ n),versionHashModifier(null),attributeType 200,attributeValueClassName NSNumber,defaultValue(null )“;
qNrAccess =“(),name qNrAccess,isOptional 0,isTransient 0,entity questions,renamingIdentifier qNrAccess,validation predicates(\ n),warnings(\ n),versionHashModifier(null),attributeType 200,attributeValueClassName NSNumber,defaultValue(null )“;
qRegDate =“(),name qRegDate,isOptional 0,isTransient 0,entity questions,renamingIdentifier qRegDate,validation predicates(\ n),warnings(\ n),versionHashModifier(null),attributeType 900,attributeValueClassName NSDate,defaultValue(null )“;
qRightAnswer =“(),name qRightAnswer,isOptional 0,isTransient 0,entity questions,renamingIdentifier qRightAnswer,validation predicates(\ n),warnings(\ n),versionHashModifier(null),attributeType 700,attributeValueClassName NSString,defaultValue(null )“;
qWrongAnswer1 =“(),名称qWrongAnswer1,isOptional 0,isTransient 0,实体的问题,renamingIdentifier qWrongAnswer1,验证谓词(\ n)时,警告(\ n)的,versionHashModifier(空),属性类型700,attributeValueClassName的NSString,默认值(空)“;
qWrongAnswer2 =“(),name qWrongAnswer2,isOptional 0,isTransient 0,entity questions,renamingIdentifier qWrongAnswer2,validation predicates(\ n),warnings(\ n),versionHashModifier(null),attributeType 700,attributeValueClassName NSString,defaultValue(null )“;
question =“(),name question,isOptional 0,isTransient 0,entity questions,renamingIdentifier question,validation predicates(\ n),warnings(\ n),versionHashModifier(null),attributeType 700,attributeValueClassName NSString,defaultValue(null )“;
},{子实体
},{USERINFO
},versionHashModifier(空)
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] ==== STOP ====

=========== 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 ==============

只给这个问题的最新情况,我从来没有成功地让这件事情起作用,所以我决定使用'机会'来重写整个应用程序。可能听起来像是解决这个问题的一种严酷的方式,但作为编程的新手,它也允许我清理代码。

我对如何解决这个问题还是很感兴趣。

+0

根据你的日志managedObjectContext没有打印任何东西。看看这个方法的FamQuiz_v2AppDelegate: - (NSManagedObjectModel *)managedObjectModel或者你创建NSManagedObjectModel的地方。可能值得发布与您的答案? – v01d 2011-01-24 21:54:41

回答

1

在终端中导航到项目目录,实际上cd到.xcodeproj文件本身。使用vi编辑project.pbxproj文件,并将旧名称的所有出现更改为已更新的名称。看来Xcode不知道更新所有的核心数据引用,但这对我有用。

0

您不会说您定位的是哪个Mac OS(Mac OS X或iOS),但这听起来像是iOS问题。在iOS的情况下,Core Data存储在运行时间之间是静态的;如果核心数据已经存在于以前的运行时间中,它将自动使用该数据,尽管代码有任何更改。在再次构建之前尝试清理所有目标。

+0

这是IOS,我做了干净的目标,但仍然有同样的问题。 – PeterK 2011-01-24 21:22:59

+0

清理所有目标,并从模拟器/设备中删除应用程序。 – Moshe 2011-03-08 00:03:23

0

我有这个相同的问题,并最终通过创建一个新的数据模型来解决它。

  1. 删除:MyApplication.xcdatamodeld
  2. 创建一个新的:文件>新建>文件...>核心数据>数据模型
  3. 添加我的实体回

加回后,我实体,一切都再次运作。