2012-04-30 20 views
0

名前、色、重量などの特定のプロパティに基づいて生物を表示するアプリケーションを作成していますが、これらのプロパティは実行時まで認識されません。これは、NSManagedObjectModelをプログラムで作成する理由です。私はモデルを適切に初期化することができるようですが、NSLogステートメントを使用して生物体のプロパティを表示します。しかし、私は、メソッドを呼び出すとき:まだ私は、これらのオプションをオンにしようとしているコアデータ:コーディネーターに永続ストアを追加できません

"Could not add persistent store:The operation couldn’t be completed. (Cocoa error 256.)"

、私:

[orgPersistentStoreCoordinator 
addPersistentStoreWithType:NSSQLiteStoreType           
configuration:nil URL:storUrl options:nil error:&error] 

それはNOを返し、私は言う私の永続ストアコーディネータの方法でエラーを取得していますがここで

NSString * const NSMigratePersistentStoresAutomaticallyOption; 
NSString * const NSInferMappingModelAutomaticallyOption; 

は完全なコードです:

- (NSPersistentStoreCoordinator *)orgPersistentStoreCoordinator { 

if (orgPersistentStoreCoordinator != nil) { 
    return orgPersistentStoreCoordinator; 
} 
NSURL *storUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] 
              stringByAppendingPathComponent:@"organisms.sqlite"]]; 
NSError *error = nil; 

orgPersistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] 
           initWithManagedObjectModel:[self orgManagedObjectModel]]; 

NSLog(@"Entities: %@",[[self orgManagedObjectModel] entities]); 

if (![orgPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
               configuration:nil URL:storUrl options:nil error:&error]) { 
     /*Error for store creation should be handled in here*/ 
    NSLog(@"Could not add persistent store:%@",[error localizedDescription]); 
} 

return orgPersistentStoreCoordinator; 

} 
同じエラーを得ました

ここでは、プログラムでManagedObjectModelを作成する方法のスニペットを示します。私はいくつかの生物を挿入し、NSManagedObjectContextを経由して保存しようとすると

+ (NSManagedObjectModel *) orgManagedObjectModel 
{ 
FieldGuide *f = [FieldGuide sharedFieldGuide]; 



NSManagedObjectModel *orgModel = [[NSManagedObjectModel alloc]init]; 

NSEntityDescription *organismEntity = [[NSEntityDescription alloc]init]; 
[organismEntity setName:@"OrganismCoreData"]; 
[organismEntity setManagedObjectClassName:@"OrganismCoreData"]; 
[orgModel setEntities:[NSArray arrayWithObject:organismEntity]]; 


NSMutableArray *orgEntityProperties = [[NSMutableArray alloc]init]; 

// 1. Name attributes 
for (NameParameter *n in f.nameAttributes) 
{ 
    NSAttributeDescription *nameAttr = [[NSAttributeDescription alloc]init]; 
    [nameAttr setName:n.name]; 
    [nameAttr setAttributeType:NSStringAttributeType]; 
    [orgEntityProperties addObject:nameAttr]; 
} 
[organismEntity setProperties:orgEntityProperties]; 


return orgModel; 
} 

最後に、アプリが終了し、表示し、これをログに:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.' 

すべてのヘルプや方向をいただければ幸いです、ありがとう!

編集: はい、私は、シミュレータからアプリケーションを削除して、ターゲットをクリアし、finuments経由でドキュメントフォルダからorganisms.sqliteを削除しようとしました。

編集#2: 私はaddPersistentStore方法はまた、別のエラーを返すことを追加するのを忘れ:あなたのstoreURLに誤りがあるよう

2012-04-30 14:13:46.109 biodex[7510:14803] CoreData: error: (1) I/O error for database at /Users/junryandelacruz/Library/Application Support/iPhone Simulator/5.1/Applications/ACE957AF-2FC0-4EAF-B226-5019F70FAB90/Documents/organisms.sqlite. SQLite error code:1, 'near "OR": syntax error' 

答えて

1

が見えます。これは、 "Unknown File Read Error"です。通常、ファイルへのパスと同じです。 documentationから

NSFileReadUnknownError = 256, 

2番目のエラーは確かに永続ストアを追加することとは何の関係もありません。コードでOR述語を確認してください。

+0

Hmmm。私はそれが理由だと思ったが、私はそのURLが正しいと確信している。あらかじめドキュメントディレクトリにorganisms.sqliteファイルがないのでしょうか?私はそれが存在しなければあなたのためにそれを作成するという印象のコアデータの下にあった。 – user1031872

+0

実際、**常に**新しい永続ストアを作成しようとします。既に存在する場合は、エラーが発生します。 – Mundi

+0

私のシミュレータから自分のアプリを削除しました。その後、シミュレータで再構築して実行すると、問題は解消されました。おそらく破損したSQLファイルです。 –

関連する問題