我一直在試圖開發一個核心數據的一段代碼,並且遇到了問題。在我的代碼的一個版本中,一切正常,但在我一直試圖擦亮代碼之後,我擁有舊版本,並且突然不起作用。我沒有改變這個班,這就是爲什麼我感到困惑。核心數據問題,應用程序重命名後?
在原始版本中,我得到的可以在這篇文章的底部看到的輸出,這只是一行,這是數據庫。在這個版本中,我什麼都沒有。
我有一種感覺,它可能是應用程序和核心數據之間的連接的一些問題。我確實通過「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 ==============
只給這個問題的最新情況,我從來沒有成功地讓這件事情起作用,所以我決定使用'機會'來重寫整個應用程序。可能聽起來像是解決這個問題的一種嚴酷的方式,但作爲編程的新手,它也允許我清理代碼。
我對如何解決這個問題還是很感興趣。
根據你的日誌managedObjectContext沒有打印任何東西。看看這個方法的FamQuiz_v2AppDelegate: - (NSManagedObjectModel *)managedObjectModel或者你創建NSManagedObjectModel的地方。可能值得發佈與您的答案? – v01d 2011-01-24 21:54:41