6

既存のiOSプロジェクトにCoreDataを追加しようとして立ち往生しています。既存のSQLデータベースはありませんが、データモデルを作成しました。私は次のチュートリアルに従いました:http ://wiresareobsolete.com/wordpress/2009/12/adding-core-data-existing-iphone-projects/

次のコードでエラーが発生します。

(NSPersistentStoreCoordinator *) persistentStoreCoordinator{
if (persistentStoreCoordinator != nil){
    return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentDirectory]
           stringByAppendingPathComponent: @"MyPOC.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
                              initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]){
    NSLog(@"Unresolved error OH NO %@, %@", error, [error userInfo]);
}
return persistentStoreCoordinator;
}

次のエラーが発生します。

2012-10-25 13:52:29.156 MyPOC[1994:11603] Unresolved error OH NO Error
Domain=NSCocoaErrorDomain Code=512 "The operation couldn’t be completed. 
(Cocoa error 512.)" UserInfo=0x8246240 {reason=Failed to create file; code = 2}, 
{reason = "Failed to create file; code = 2";}

なぜクラッシュするのか、どうすれば解決できるのか、本当にわかりません。さらに詳しい情報が必要な場合はお知らせください。

4

2 に答える 2

16

私はほぼ同じチュートリアルに従っていて、同じエラーメッセージを受け取りました。私は問題が何であるかを理解しました。

私の場合、storeURLパスが正しくなく、存在しないフォルダーを指しているため、ファイルを作成できませんでした。

私のヘルパーメソッド[selfapplicationDocumentDirectory](質問で提供しなかった)では、チュートリアルと同じようにサンプルコードを入力しました。

- (NSString *) applicationDocumentsDirectory
{
    return [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject];
}

URLfile:///Users/xxxxxx/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/A6FDD8DB-475B-4C9B-B995-28CCE068DF82/ライブラリ/ドキュメントを作成しました/

そこには、無効なパスを生成するばかげたコード補完のタイプミスがあります。見えますか?

これは、NSSearchPathDirectory入力パラメーターの列挙型NSDocumentationDirectoryであり、代わりにNSDocumentDirectoryである必要があります。

正しいコードとURLは次のとおりです。

- (NSString *) applicationDocumentsDirectory
{
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject;
}

URL:file:///Users/xxxxxx/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/A6FDD8DB-475B-4C9B-B995-28CCE068DF82/ドキュメント/

于 2013-11-03T13:45:18.200 に答える
0

この質問を閉じます。新しいコアデータプロジェクトを開始し、他のコードをインポートしましたが、機能しました。他のプロジェクトで動作させることはありません。おそらく何かを忘れたが、何も見つからなかった

于 2012-12-20T09:51:40.330 に答える