2011-01-24 13 views
1

私はコードのコアデータを開発しようとしており、問題にぶつかっています。私のコードのあるバージョンではすべて動作しますが、コードを磨くことを試みた後、私は古いバージョンを持っていて、突然動作しません。私はこのクラスを変更していないので、私は困惑しています。アプリケーションの名前を変更した後、コアデータに問題がありますか?

元のバージョンでは、この記事の最後に表示される出力が表示されますが、これはデータベースである1行だけです。このバージョンでは何も得られません。

アプリとCore Dataとの接続に問題があると感じました。私は "Project - > Rename"を使ってアプリケーションの名前を変更しました。多分それがこの問題の理由ですか?私はどこを見るべきか分からないのではないかと心配しています。

編集:ちょうどxcdatamodelが古い名前を持っていることを見ました!

EDIT2:古いバージョンのコピーの名前を変更して同じ問題が発生したので、この問題の理由はアプリケーションの名前です。今、コアデータデータベースを新しい名前に合わせる方法が不思議です。

// 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 = "()、名前idQ、isOptional 0、isTransient 0、エンティティ質問(\ 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 ) "; (\ n)、警告(\ n)、versionHashModifier(null)、attributeType 200、attributeValueClassName NSNumber、defaultValue(null)、nullのいずれかを返します。 ) "; qRegDate = "()、名前qRegDate、isOptional 0、isTransient 0、エンティティ質問、renamingIdentifier qRegDate、検証述語(\ n)、警告(\ n)、versionHashModifier(null)、attributeType 900、attributeValueClassName NSDate、defaultValue(null) ) "; (\ n)、警告(\ n)、versionHashModifier(null)、attributeType 700、attributeValueClassName NSString、defaultValue(null)、nullのいずれかです。 ) "; (null)、属性の型700、attributeValueClassName NSString、defaultValue(null)、およびnullのいずれかを指定します。 ) "; (null)、警告(\ n)、versionHashModifier(null)、attributeType 700、attributeValueClassName NSString、defaultValue(null)、nullのいずれかです。 ) "; (\ n)、警告(\ n)、versionHashModifier(null)、attributeType 700、attributeValueClassName NSString、defaultValue(null)、nullのいずれかを指定します。 ) ";
}、サブエンティティ{
}、ユーザー情報{
}、versionHashModifier(ヌル)
2011-01-24 22:27:54.121 FamQuiz_R0_2 [29523:207]
2011-01-24 22:27:54.123 (null)); sortDescriptors:((null));型:NSManagedObjectResultType(NSStrings); NSQuery_R0_2 [29523:207]
2011-01-24 22:27:54.123 FamQuiz_R0_2 [29523:207] fetchRequest:エンティティ:質問:述語: ;)
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 ====

===========アップデート2 ===== =====

ここでは、コードは次のとおり

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

私はこの手続きについて本当に困惑しています私は元の名前に戻ってアプリの名前を変更するテストをした後、私は働いた。私にとっては、これはどこかに私が見つけることができない接続があり、私が探していることを意味します。

私は、データベースへの接続を失うことなくコアデータでアプリケーションの名前を変更する方法を本当に知りたいと思います。

名前を変更する必要があるので、誰かがこれにいくつかの光を広げることができたら大変感謝します。

ただ、この問題に関する最新情報を提供するために=============== UPDATE-4 ==============

に、私は私は、アプリケーション全体を書き換えるために「機会」を使うことに決めました。この問題を解決する厳しい方法のように聞こえるかもしれませんが、プログラミングにとって非常に新しいので、コードをクリーンアップすることもできました。

私はまだこの問題を解決する方法に非常に興味があります。

+0

あなたのログによると、managedObjectContextは何も印刷していません。このメソッドのFamQuiz_v2AppDelegateを見てみましょう: - (NSManagedObjectModel *)managedObjectModelまたはNSManagedObjectModelを作成した場所。あなたの答えでそれを掲示する価値がありますか? – v01d

答えて

1

端末では、プロジェクトディレクトリに移動し、実際には.xcodeprojファイル自体にcdします。 viを使用してproject.pbxprojファイルを編集し、元の名前のすべてのものを更新したものに変更します。 XcodeはすべてのCore Dataのリファレンスを更新することを知らないようですが、これは私のために働いていました。

0

あなたがターゲットとするMac OS(Mac OS XまたはiOS)については言わないが、これはiOSの問題のように聞こえる。 iOSの場合、コアデータストアはランタイム間で静的です。以前の実行時からコアデータがすでに存在する場合、コードの変更にかかわらず自動的に使用されます。再度ビルドする前にすべてのターゲットをクリーニングしてみてください。

+0

それはIOSです、私はきれいなターゲットをしましたが、同じ問題がまだあります。 – PeterK

+0

すべてのターゲットを消去して、シミュレータ/デバイスからもアプリを削除してください。 – Moshe

0

私はこの同じ問題を抱え、最後に新しいデータモデルを作成することで修正しました。

  1. の削除:ファイル]> [新規]> [ファイル...>コアデータ>データモデル
  2. はバック

戻って私を追加した後、私のエンティティを追加します。新しいものを作成し

  • をMyApplication.xcdatamodeldエンティティは、すべてが再び働いた。

  • +0

    あなたの答えをありがとう、私はこの記事を正常に私のアプリの名前を変更して書いて以来、私はあなたと同じことをした:-) – PeterK

    関連する問題