2011-01-24 79 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. 添加我的實體回

加回後,我實體,一切都再次運作。